2014-01-17 3 views
0

Я использую AutoLayout для компоновки ячеек моего tableView. Когда содержимое некоторых элементов, которые у меня есть в ячейке, пусто, я хотел бы скрыть ячейку.Как скрыть ячейку и удалить из потока в объективе-C?

Моя проблема заключается в том, что если я помечать клетку быть скрыта с:

cell.hidden = YES; 

то «пространство», используемое ячейкой (высота которого вычисляется в heightForRowAtIndexPath) по-прежнему существует, но неактивно. По сути, ячейка скрыта, но она все еще является частью «потока».

Если я попытаюсь установить высоту в ноль на ячейке, я хочу спрятать в heightForRowAtIndexPath, тогда я получаю исключение, потому что автомат не может удовлетворить все ограничения.

Есть ли простой способ скрыть ячейку и удалить ее из «потока» на дисплее или мне нужно обновить мои ограничения на ячейку, чтобы обеспечить высоту 0 для достижения этого?

Спасибо, Nicolas

ответ

0

Вам необходимо обновить модель данных, чтобы не включать в клетку, так что она не возвращается в cellForRowAtIndexPath:.

В качестве альтернативы, вы можете отключить автоматическую раскладку на ячейку, когда вы настраиваете высоту до 0:

[cell removeConstraints:cell.constraints] 
+0

Я считаю, что первый из них не путь в моем случае, когда число строк предопределенные для представления различных полей содержимого объекта (например, обзор, адрес, улица, ...). Если одно из этих полей пуст, я пытаюсь скрыть ячейку. Ваше второе решение будет работать (хотя вам придется удалить ограничения на cell.contentView, а не непосредственно на ячейку). Проблема в том, что я повторно использую ячейки, поэтому мне нужно повторно обновить ограничения после этого. Это кажется немного грязным для чего-то, что выглядит довольно простой задачей. – nicolasccit

+0

Вы можете переключиться на ручной макет для своих ячеек таблицы или добавить свойство 'itemIsHidden' в свои элементы модели данных и иметь' numberOfRowsInSection: 'вернуть номер, в котором это свойство' == NO'. В любом случае UITableView не имеет встроенного механизма для скрытия ячеек таблицы, которые вы говорите, чтобы показывать. –

+0

Большое спасибо за помощь. Я просто попробовал другой способ, который мне нравится. Я изменил свое ограничение на гибкость, поэтому перешел из: @ "V: | -padding - [_ titleLabel] - [_ descriptionLabel] -padding- |" to: @ "V: | - (> = 0, <= padding) - [_ titleLabel] - (<= padding) - [_ descriptionLabel] - (> = 0, <= padding) - |". Таким образом, высота на 0 приемлема на основе ограничения. Это звучит как разумный подход к вам? – nicolasccit

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