Chr*_*let 5 iphone objective-c uitableview ios
我正在尝试UITableViewCell
在没有自动布局的Interface Builder中设置一个简单的.我正在使用古老的弹簧和支柱.
当我给一个标签一个灵活的宽度时,似乎布局好像UITableViewCell
有一个更大的宽度,即使UITableViewCell
它告诉我它的宽度为375像素layoutSubviews
:
- (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
}
Run Code Online (Sandbox Code Playgroud)
在模拟的iPhone 5S(iOS 7或8)上,superview是320但UILabel扩展到640.
在模拟的iPhone 6上,超级视图是375,但UILabel扩展到695.
在模拟的iPhone 6 Plus上,superview是414,但UILabel是734.
我对其他观点没有这个问题.例如,我可以添加UILabel
一个UIViewController
并使其正确拉伸宽度.到底是怎么回事?我该如何解决这个问题?
编辑:
有趣的是,如果我在编程期间添加约束,cellForRowAtIndexPath:
它似乎按预期工作,只要我使用旧的dequeueReusableCellWithIdentifier
而不是dequeueReusableCellWithIdentifier:forIndexPath:
.我想在Interface Builder中保留所有约束.有任何想法吗?
小智 1
我今天玩了一下这个。看起来相对于内容视图的框架实例化标签时的标签框架是错误的。如果我使标签与故事板中的单元格大小相同,则awakeFromNib
contentView 中的大小为 ,CGRectZero
但标签的大小为我在故事板中设置的大小。因此,当您将layoutSubviews
contentView 调整为正确的大小 (0,0,320,44) 时,由于灵活的宽度掩码,标签本身会随内容视图一起调整大小(宽度也增加 320)。这就是为什么它看起来比预期的要大的原因。
我可以解决这个问题的唯一方法(尽管,这感觉像是一个粗俗的黑客,你可能应该坚持自动布局),是相对于awakeFromNib
.
- (void)awakeFromNib
{
[super awakeFromNib];
self.label.frame = self.bounds;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1130 次 |
最近记录: |