2015-07-03 9 views
1

Я работаю над автозагрузкой для UITableViewCell с многострочной сетью UILabel. Мой UILabel привязан к вершине, справа, внизу и слева. Все работает нормально, пока я не добавлю верхний край; если я это сделаю, некоторые высоты ячеек вычисляются штрафом, а некоторые - нет, поэтому текст обрезается в этих случаях.Xcode 6, iOS7 UITableViewCell UIlabel многострочный, кошмар Autolayout

Я упростил свое мнение, поскольку это немного сложнее. Это выглядит следующим образом:

enter image description here

enter image description here

Это соответствующий код, где я могу вычислить высоту ячейки:

CellMessage *cell = self.prototypeCell; 
cell.message = [self messageForRowAtIndexPath:indexPath]; 
[self.prototypeCell layoutIfNeeded]; 

CGSize size = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    message.cellHeight = size.height + 1; 

Я прочитал много SOF потоков и учебники, и все из них отличаются на тонкие точки, иногда они говорили, что установка предпочтительной максимальной ширины является ключевым моментом, я пробовал настройку и не устанавливал ее, но у меня такие же результаты, но я не совсем понимаю, как это происходит ram работ :(

Что мне не хватает/не так? Все, что я мог попробовать, или любой совет, указывающий в правильном направлении, был бы очень оценен.

+0

вы пытались установить трейлинг ограничение на '='? –

+0

http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout –

+0

Интересно, почему вы устанавливаете Trailing Space> =? Если вы хотите, чтобы ячейка была расширена до UILabel, попробуйте использовать tralling space = и установите приоритет сопротивления сжатию выше, чем значение по умолчанию (т.е. 751) – thanyaj

ответ

0

Итак, у меня была аналогичная проблема, недавно. я работал его таким образом (это было на стрижа):

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
CellMessage *cell = (CellMessage *)[tableView.dataSource tableView:tableView cellForRowAtIndexPath:indexPath]; 
[cell sizeToFit]; 
[cell setNeedsUpdateConstraints]; 
[cell updateConstraintsIfNeeded]; 

CGSize size = [cell systemLayoutSizeFittingSize: UILayoutFittingCompressedSize]; 

return size.height+1; 
} 

Это рассчитает размер с текстовыми данными. Но у вас будет еще одна проблема, чтобы правильно вычислить текст, вам нужно будет использовать ограничение, чтобы определить ширину, и оно не может быть завершающим/ведущим, оно должно быть ограничено шириной, поэтому пользовательский класс UITableViewCell вы можете сделать:

- (void)updateConstraints { 
[super updateConstraints]; 
self.myLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.myLabel.frame); 
} 

НазваниеLabel - это UILabel, связанный как свойство.

Кстати, попробуйте исправить завершающую к постоянной, а не> =

+0

Не могли бы вы ответить на том же языке в программах OP? Он пишет в ObjC, и хотя они легко переводимы, было бы лучше иметь его в ObjC. –

+0

Спасибо @ RodolfoAntonici. Это выглядело многообещающе, но у меня все еще есть одна и та же проблема :(Мне нужно пропустить что-то очевидное здесь. – ssantos

+0

Спасибо @Julian. Что касается меня, то после 12 часов борьбы с ним (на самом деле), это нормально, какой бы язык ни был works :) – ssantos