2016-11-10 2 views
0

У меня есть UITableView, который я заполняю автосогласованием ячеек. UITableView установка довольно проста:UITableViewCell макет не обновляется до тех пор, пока ячейка не будет повторно использована

tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 

Точно так же как Apple, рекомендует здесь: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html

Чтобы включить самостоятельно проклейки просмотр таблицы ячеек, необходимо установить RowHeight свойство представления табличной к UITableViewAutomaticDimension. Вы также должны присваивать значение свойству оценочногоRowHeight. Как только оба из этих свойств установлены, система использует автоматический макет для вычисления фактической высоты строки .

При настройке ячейки я также отключил/разрешил некоторые ограничения для достижения необходимого вида. Здесь все становится интересным. Макет ячейки не обновляется до тех пор, пока ячейка не будет повторно использована. Буквально. Вы можете позвонить layoutIfNeeded(), setNeedsLayout(), layoutSubviews() или любым другим способом, нет способа заставить ячейку обновить его макет.

Все остальные аспекты работают довольно хорошо: этикетки меняют свой текст, вы скрываете/открываете представления, но макет застревает до тех пор, пока ячейка не будет повторно использована.

Вопрос: что вызывает его и как избежать такого поведения?

ответ

0

В моем случае проблема была вызвана estimatedRowHeight.

Простое удаление этой линии

tableView.estimatedRowHeight = 70 

неподвижную мои проблемы. Ячейка должным образом обновила его макет, и это почти устранило мои проблемы.

Но, скорее всего, вы столкнетесь с еще одной проблемой, при этом высота вашей ячейки будет равна 43,5 балла. Вы входите также будут заполнены с ошибками Автокомпоновки, которая будет включать в себя линию, как этот

<NSLayoutConstraint:0x600000097570 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fd4ee511d20.height == 43.5 (active)> 

Очевидно, что если вы не будете предоставлять estimatedRowHeight, вид таблицы ставит 43,5 точек ограничения высоты на просмотре содержимого вашей ячейки, и если «внутренняя» высота вашей ячейки не будет соответствовать (и вероятность того, что это 99,99%), тогда это приведет к ошибкам в журнале.

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

Смежные вопросы