2013-10-28 2 views
1

У меня есть пользовательская ячейка со следующим AutoLayout:AutoLayout + heightForRowAtIndexPath/sizeWithFont не работает должным образом

NSMutableArray *constraints = [NSMutableArray new]; 
    [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[descriptionLabel]-35-|" options:0 metrics:nil views:views]]; 
    [constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[descriptionLabel]-10-|" options:0 metrics:nil views:views]]; 
    [self.contentView addConstraints:constraints]; 

В моей tableViewDelegate, то heightForRowAtIndexPath: рассчитываются следующим образом:

return [cell.descriptionLabel systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 20; 

К сожалению, он не работает, когда мой текст обертывается - он корректен только для ячеек с текстом, где нет обертывания. Что мне не хватает?

+0

вы пытались UILayoutFittingExpandedSize? – hybridcattt

+0

Да, ничего не меняет; он работает только, если я устанавливаю preferredMaxLayoutWidth, но мне не нравится устанавливать его на статическое число ... – swalkner

ответ

2

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

И оказалось, что единственный точный способ sizeThatFits:

label.text = @"..."; 
CGSize s = [label sizeThatFits:CGSizeMake(label.frame.size.width, CGFLOAT_MAX)]; 
+0

, но как мне получить label.frame.size.width? это 0 из-за AutoLayout. И я не хочу устанавливать его вручную – swalkner

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