2013-08-27 3 views
3

У меня есть 3 ярлыка в UITableViewCell и у вас есть ярлыки, чтобы они произносили слово. Если они переносят слово, текст переходит в следующую ячейку. Как получить AutoLayout для расширения ячейки на основе содержимого без необходимости писать код в методе heightForRowAtIndex? Разве нет ограничений, которые я могу использовать для автоматической настройки ячейки на основе contentView?У меня есть UITableViewCell с автоопределением

enter image description here enter image description here

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

ответ

2

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

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

Вы можете поэкспериментировать с заселением «свободной» ячейки (то есть ячейки, которую вы только что создали, а не добавили в таблицу) и выложите ее для каждой строки в вашем источнике данных при расчете heightForRow.

+0

Я сам использую свободную ячейку. Но это лучше всего с несколькими ячейками или если вы управляете количеством ячеек в представлении таблицы самостоятельно. – Abizern

+0

, когда вы говорите свободную ячейку, вы имеете в виду ее создание в коде? Поэтому, я думаю, мне нужно будет сделать label1.size.height + label2.size.height + label3.size.height + topPadding + bottomPadding', и это будет высотой ячейки? Или мне нужно сделать constraintToSize для каждой ячейки? – Bot

+0

Я имею в виду, создайте ячейку в коде, заполните ее и вызовите [layoutIfNeeded], чтобы определить размер. Если ваши ограничения настроены правильно, то это должно рассчитать точный размер ячейки, необходимый для отображения вашего контента. – jrturton

0

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

Something like: 
    cell.frame.size.height 

Если высота настолько велика, что вы знаете, лейбл завернутые в две строки, а затем увеличить высоту ячейки вы собираетесь загрузить.

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