iOS 8 UITableViewCell上的弹簧和支柱调整大小

时间:2014-10-15 23:21:32

标签: ios objective-c iphone uitableview

我正在尝试在Interface Builder 中设置一个简单的UITableViewCell而不使用自动布局。我正在使用古老的弹簧和支柱。

当我给标签一个灵活的宽度时,似乎UITableViewCell的宽度要宽得多,即使UITableViewCell告诉我它的宽度为375像素{ {1}}:

layoutSubviews

在模拟iPhone 5S(iOS 7或8)上,超级视图为320,但UILabel扩展为640。

在模拟iPhone 6上,超级视图为375,但UILabel扩展到695.

在模拟的iPhone 6 Plus上,超级视图为414,但UILabel为734。

我对其他观点没有这个问题。例如,我可以将- (void)layoutSubviews { [super layoutSubviews]; NSLog(@"Label width: %f", self.nameLabel.frame.size.width); // 695.0 for a label that stretches the whole width NSLog(@"Superview (UITableViewCell) width: %f", self.nameLabel.superview.frame.size.width); // 375.0 } 添加到UILabel并让它正确拉伸宽度。到底是怎么回事?我该如何解决这个问题?

修改

有趣的是,如果我在UIViewController期间以编程方式添加约束,那么它似乎按预期工作,只要我使用较旧的cellForRowAtIndexPath:而不是dequeueReusableCellWithIdentifier。我想在Interface Builder中保留所有约束。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我今天玩了一下这个。看起来像标签的框架在相对于内容视图的框架实例化时是错误的。如果我使标签与故事板中的单元格大小相同,那么在awakeFromNib中,contentView的大小为CGRectZero,但标签具有我在故事板中设置的大小。因此,当您到达layoutSubviews并且contentView的大小调整为正确大小(0,0,320,44)时,由于灵活的宽度掩码,标签本身会随内容视图一起调整大小(宽度增加320以及)。这就是为什么它出现的大于预期的原因。

我能解决这个问题的唯一方法(虽然,感觉就像一个严重的黑客,你应该坚持自动布局),是设置相对于{{1中的内容视图的标签框架}}

awakeFromNib