【问题标题】:Springs and struts resizing broken on iOS 8 UITableViewCelliOS 8 UITableViewCell 上的弹簧和支柱调整大小损坏
【发布时间】:2014-10-15 23:21:32
【问题描述】:

我正在尝试在界面生成器中设置一个简单的UITableViewCell 没有自动布局。我正在使用旧的弹簧和支柱。

当我给标签一个灵活的宽度时,它的布局似乎好像UITableViewCell 的宽度要大得多,尽管UITableViewCell 告诉我它在layoutSubviews 中的宽度是375 像素:

- (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
}

在模拟的 iPhone 5S(iOS 7 或 8)上,superview 为 320,但 UILabel 扩展到 640。

在模拟的 iPhone 6 上,superview 为 375,但 UILabel 扩展到 695。

在模拟的 iPhone 6 Plus 上,superview 是 414,但 UILabel 是 734。

我对其他视图没有这个问题。例如,我可以将UILabel 添加到UIViewController 并让它正确拉伸宽度。到底是怎么回事?我该如何解决这个问题?

编辑:

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

【问题讨论】:

标签: ios objective-c iphone uitableview


【解决方案1】:

我今天玩了一下这个。相对于内容视图的框架实例化标签时,标签的框架看起来是错误的。如果我使标签与情节提要中的单元格大小相同,则在awakeFromNib 中,contentView 的大小为CGRectZero,但标签的大小与我在情节提要中设置的大小相同。因此,当您到达layoutSubviews 并且 contentView 被调整为正确的大小(0,0,320,44)时,由于灵活的宽度掩码,标签本身随着内容视图的大小而调整(宽度也增加了 320 )。这就是为什么它看起来比预期的要大。

我可以解决这个问题的唯一方法(尽管感觉很糟糕,您可能应该坚持使用自动布局),是设置标签的框架相对于 awakeFromNib 中的内容视图。

- (void)awakeFromNib
{
    [super awakeFromNib];
    self.label.frame = self.bounds;
}

【讨论】:

  • 宾果游戏!谢谢约翰 :) 我会坚持使用单元格的自动布局。值得庆幸的是,它们都在自己的 nib 中,因此不会影响项目的其余部分。
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2014-11-05
  • 2023-03-27
  • 1970-01-01
  • 2015-08-24
相关资源
最近更新 更多