Кто-нибудь использовал MT.D MultilineEntryElement? - PullRequest
3 голосов
/ 11 марта 2012

Я использую самую последнюю версию, созданную Alxandr (февраль / 2012).

Я пытаюсь добавить его в раздел, используя ту же технику, что и при добавлении EntryElement. MultilineEntryElement добавляет в раздел, но принимающая ячейка не будет расширяться за пределы размера по умолчанию. MLEE перезапишет раздел ниже. Я хотел бы, чтобы по умолчанию на всю ширину экрана и 10 строк. Каков наилучший способ сделать это?

Спасибо тебе! Matt

Ответы [ 2 ]

3 голосов
/ 05 июня 2012

Чтобы решить эту проблему, установите для свойства UnevenRows RootElement значение true, например:

 var r = new RootElement ("foo") { ... }
 r.UnevenRows = true;
0 голосов
/ 04 июня 2012

Я провел немного больше исследований по этому вопросу. Обратите внимание - я использую собственную реализацию MultilineEntryElement, которая, вероятно, немного отличается от других.

Во-первых, стоит заявить, что проблема не проявляется для меня в «простых» сценариях - когда MultilineEntryElement помещается в раздел, который создается как часть первоначального создания RootElement. Проблема проявляется только при манипулировании существующим RootElement, который уже был обработан DialogViewController.

Похоже, есть ошибка в том, как MonoTouch.Dialog вычисляет размер строк. Если элемент реализует IElementSizing, то MT.D вызовет его перегрузку GetHeight (). После того, как MT.D обнаружил элемент с «неправильной» высотой, он, кажется, должен вызывать этот метод каждый раз, когда обрабатывает изменение во вложенном разделе. Это может быть дорого ... Так что, если MT.D выкладывает RootElement и не нашел элемент, который реализует IElementSizing, кажется, что (возможно, предназначенный для оптимизации?) MT.D будет IGNORE IElementSizing информация для любых элементов, которые являются добавлен POST начальный рендеринг. Поэтому свойство CELL RowHeight будет возвращать стандартную высоту строки, а MultilineEntryElement будет отображать UITextView, который проливается на ячейки под ним.

Обходной путь, который я нашел, - создать простой элемент с именем DummyElement, который реализует IElementSizing и возвращает 0 для GetHeight (), и добавить его в начальный RootElement до того, как произойдет начальная компоновка. Если вы сделаете это, MT.D зарегистрирует наличие элемента с неправильной высотой и вызовет метод GetHeight () для вашего MultilineEntryElement, когда вы позже добавите его в свой элемент «DOM».

Вот мое минимальное значение DummyElement, если оно помогает:

public class DummyElement : Element, IElementSizing 
{    
    public DummyElement() : base ("empty")
    {
    }   

    public float GetHeight (UITableView tableView, NSIndexPath indexPath)
    {
        return 0;
    }
}
...