2015-11-24 2 views
5

У меня есть UITableView с автоматической высотой ряда и обычным UITableViewCell. Внутри UITableViewCell я сначала добавляю UIButton с программными ограничениями Autolayout. Они расположены идеально, как я хочу. Затем, через 3 секунды (NSTimer), я удаляю все эти UIButton s и снова добавляю другое число из них. (Для, например, изначально у меня есть 4 UIButtons, через 3 секунды, я удалить эти 4 UIButton с и добавить 3 различных нихProgrammatic Изменения в Autolayout внутри UITableViewCell обновляются только после изменения ориентации

Первоначально:.

Initially После 3 секунд:

3 seconds later

Почтовый поворот:

enter image description here

Почему это происходит? Я не вижу никаких предупреждений Autolayout. Кроме того, после изменения ориентации все правильно позиционируется. Что требует изменения ориентации? Как я могу заставить это вручную (перезагрузка TableView только для этого, кажется, слишком много, чтобы сделать)

PS: Я попытался с помощью setNeedsUpdateConstraints, layoutIfNeeded, layoutSubviews, но безрезультатно.

Код UITableViewCell: http://pastebin.com/TcHUXgDU. (Добавлен пастебин, чтобы не загрязнять это пространство). Но в основном есть метод configure:, который у меня есть внутри моего подкласса tableview, который я вызываю в cellForRowAtIndexPath его содержащего UITableView. Этот метод добавляет эти ограничения. Кроме того, после срабатывания таймера вызывается тот же код (в другой функции), за исключением того, что количество добавляемых элементов отличается от исходного количества элементов.

Это мой UITableViewCell макет: (только сверху, снизу, ведущие, замыкающие ограничения, которые были добавлены к UIView "Outerview")

uitableviewcell layout

+0

можете ли вы разместить код? и до ориентации я вижу, что высота ячейки меняется, что приводит к тому, что кнопки сжимаются до прокладки, тогда как изменение ориентации делает это нормально, изменяя высоту ячейки. –

+0

Я разместил код. Кроме того, до ориентации высота ячейки постоянна для всех 3 ячеек. (в отличие от того, как вы говорите) –

+0

Не отвечает на ваш вопрос, но при использовании библиотеки, например [Масонство] (https://github.com/SnapKit/Masonry), вам будет гораздо приятнее использовать автоматическое отключение, – sjwarner

ответ

0

Вам нужно перезагрузить UITableView, это будет повторно caculate высота ячейки

+0

Да, это как панацея с высотой раскладки uitableviewcell, но мне было интересно, есть ли более дешевый способ просто заставлять обновления в макете uitableviewcell. –

+0

- (void) reloadRowsAtIndexPaths: (NSArray * _Nonnull) indexPaths withRowAnimation: (UITableViewRowAnimation) анимация. проверить документ UITableView – yanyabo111

+0

Закончив перезагрузку таблицы просмотра –

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