UILabel неправильно изменяет размер в LayoutSubview
У меня есть подкласс UITableViewCell, чтобы показать пользовательскую ячейку. Этот класс интегрирован с раскадровкой, и поэтому рамки свойств уже установлены в IB.
Моя цель - динамически устанавливать ширину метки в соответствии с содержащимся в ней текстом и перерисовывать метки с помощью setNeedsLayout.
Часть файла.m для пользовательской ячейки:
static CGFloat const kHorizontalEdgeOffset = 74.0;
static CGFloat const kVerticalEdgeOffset = 10.0;
static CGFloat const kNameLabelHeight = 22.0;
- (void)setFriend:(Person *)friend
{
if (_friend != freeDomeFriend) {
_friend = friend;
self.friend = friend;
}
// Set the text for the first name and save the size to fit the text.
self.firstNameLabel.text = friend.firstName;
self.firstNameLabelSize = [self.firstNameLabel.text sizeWithFont:[UIFont fontWithName:@"Helvetica-Bold" size:17.0]];
// Set the text for the last name and save the size to fit the text.
self.lastNameLabel.text = friend.lastName;
self.lastNameLabelSize = [self.lastNameLabel.text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17.0]];
// Ask the view to layout the view with the changes.
[self setNeedsLayout];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void)layoutSubviews
{
[super layoutSubviews];
// Set the new frames according to the caluclated size for the labels.
self.firstNameLabel.frame = CGRectMake(kHorizontalEdgeOffset, kVerticalEdgeOffset, kNameLabelHeight, self.firstNameLabelSize.width);
self.lastNameLabel.frame = CGRectMake(kHorizontalEdgeOffset + self.firstNameLabelSize.width + 2.0,
kVerticalEdgeOffset, kNameLabelHeight, self.lastNameLabelSize.width);
NSLog(@"FN: %@ \n LN: %@ \n ------------------", self.firstNameLabel, self.lastNameLabel);
}
Мой NSLog дает мне правильный вывод:
2012-05-12 23:56:36.741 MyProject[11421:16403] FN: <UILabel: 0xa888eb0; frame = (74 10; 22 57); text = 'Callum'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa880fa0>>
LN: <UILabel: 0xa8890c0; frame = (133 10; 22 45); text = 'Webb'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa889130>>
------------------
2012-05-12 23:56:36.742 MyProject[11421:16403] FN: <UILabel: 0xa88abf0; frame = (74 10; 22 48); text = 'Hervé'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa88ac60>>
LN: <UILabel: 0xa88ad00; frame = (124 10; 22 86); text = 'Fahendrich'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa88ad70>>
------------------
2012-05-12 23:56:36.743 MyProject[11421:16403] FN: <UILabel: 0xa88b4a0; frame = (74 10; 22 41); text = 'John'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa88b510>>
LN: <UILabel: 0xa88b5b0; frame = (117 10; 22 50); text = 'Clema'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa88b620>>
------------------
2012-05-12 23:56:36.743 MyProject[11421:16403] FN: <UILabel: 0xa88bf30; frame = (74 10; 22 40); text = 'Luke'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa88bfa0>>
LN: <UILabel: 0xa88c040; frame = (116 10; 22 74); text = 'McManus'; clipsToBounds = YES; opaque = NO; autoresize = LM+RM+TM+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa88c0b0>>
------------------
Однако это то, что я получаю визуально (я не могу загрузить изображение, поэтому я постараюсь описать его): метки имеют очень маленький размер (ширину и высоту), а происхождение кажется случайным. Иногда lastName будет в нижней части ячейки, а имя - в середине.
Что я делаю неправильно? Я был на этом часами.
Спасибо за помощь.