Я провел немного больше исследований по этому вопросу. Обратите внимание - я использую собственную реализацию 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;
}
}