2013-07-06 4 views
1

В моей awakeFromNib функции, у меня есть:Multiline UILabel из XIB

[_descriptionLabel setLineBreakMode:UILineBreakModeWordWrap]; 
[_descriptionLabel setNumberOfLines:10]; 
[_descriptionLabel sizeToFit]; 

и пока мой лейбл выглядит следующим образом:

UILabel

Я знаю, что установка этих вызовов на право label, потому что без этих строк текст появляется вертикально по центру, а не выравнивается вверху. Как я могу сделать мой многострочный?

Я также пробовал setNumberOfLines:0.

РЕШЕНИЕ Я неправильно установил ширину в файле xib.

ответ

0

Просто убедитесь, что начальная ширина установлена ​​правильно. Чем это должно увеличить/уменьшить высоту. Но все же метка не будет выровнена вверху, она будет центрирована в своем предыдущем размере после вызова sizeToFit (в случае, если новая высота меньше, чем раньше, в противном случае начало будет оставаться неизменным).

+0

После фиксации ширины этикетка фактически выровнена вверх. –

1
  1. Попробуйте установить [_descriptionLabel setNumberOfLines:0];, который устанавливает количество линий в auto.
  2. Возможно, что sizeToFit меняет ширину вашей метки, постарайтесь установить ее в явную ширину или удалить.
0

Если вы не используете AutoLayout, вам нужно измерить текст в коде:

CGRect frame = _descriptionLabel.frame; 
CGSize size = [_descriptionLabel.text sizeWithFont:_descriptionLabel.font constrainedToSize:CGSizeMake(frame.size.width, FLOAT_MAX) lineBreakMode:_descriptionLabel.lineBreakMode]; 
frame.size.height = MIN(MAX(size.height, frame.size.height), MAX_ALLOWED_HEIGHT); 
_descriptionLabel.frame = frame; 
0

Вы уверены, что ваш awakeFromNib находится в нужном месте. Если он находится в контроллере представления, он не будет работать. Если это в реализации пользовательских этикеток, он должен вызываться, и что код должен работать:

@interface TestLabel : UILabel 
@end 

@implementation TestLabel 

- (void)awakeFromNib 
{ 
    [self setLineBreakMode:UILineBreakModeWordWrap]; 
    [self setNumberOfLines:10]; 
    [self sizeToFit]; 
    NSLog(@"Label: %@", NSStringFromCGRect(self.frame)); 
} 

@end 

Кроме того, это проще установить numberOfLines в 0, что означает «любое число строк». И вам не нужно устанавливать UILineBreakModeWordWrap, так как это значение по умолчанию.

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

+0

Код 'awakeFromNib' находится в подклассе' UITableViewCell'. Да, я попробовал 'setNumberOfLines: 0'. –

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