2013-02-17 5 views
3

Итак, я делаю приложение с помощью iOS 6 и задаюсь вопросом, почему мой код, который отлично работал на iOS 5, больше не работает. У меня есть ячейка с динамическим UILabel, который настраивается на основе текста, который он несет.UILabel sizeToFit работает только с отключением AutoLayout

Это с autolayout включен:

enter image description here

Это с autolayout выключен:

enter image description here

Вот мой код:

- (CGFloat)heightForText:(NSString *)bodyText 
{ 

#define FONT_SIZE 13.0f 
#define CELL_CONTENT_WIDTH 280.0f 
#define CELL_CONTENT_MARGIN 5.0f 

    CGSize constraintSize = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 
    CGSize labelSize = [bodyText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping]; 
    CGFloat height = MAX(labelSize.height, 36.0f); 
    // NSLog(@"height=%f", height); 
    return height + (CELL_CONTENT_MARGIN * 2); 

} 



- (CGFloat)tableView:(UITableView *)tv heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSInteger section = [indexPath section]; 

    switch (section) { 


     case 0: 
      if ([self.text.text length]!=0) 
      { 
       return [self heightForText:self.text.text]; 
      } 
      else if ([self.link.text length]!=0) 
      { 

       return 60.0f; 

      } 
} 
+0

автозапуск с комбинацией панели меню -> Редактор -> Размер, соответствующий содержанию и/или «приоритету обхода содержимого» в «инспекторе размеров» внутри Утилитов (без другого кода для самого ярлыка) не работает? – blub

+0

если нет: используйте розетки для ширины и высоты, например http://stackoverflow.com/questions/13105544/auto-sizing-uilabel-when-using-autolayout – blub

+0

Я не знаю, как использовать розетки для ограничения веса по высоте, как указано в этот вопрос. – kratos

ответ

2

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

Ваш ярлык должен иметь ограничения, чтобы сделать его фиксированным расстоянием от каждого края его надзора. Это может быть уже так - если это так, проблема в том, что этикетка не знает, как обернуть ее строки - вам также нужно установить preferredMaxLayoutWidth на этикетке.

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

+1

Просто добавьте: определенно попробуйте установить 'preferredMaxLayoutWidth', а не ограничивать ширину метки с помощью AutoLayout: она действительно деактивировала метку на две строки, но не подталкивала элементы под ней. Очень расстраивает. –