4

我的应用子类 aUITableViewCell并实现layoutSubviews修改单元格的contentView宽度,如下所示:

- (void)layoutSubviews {
    [super layoutSubviews];
    // position subviews...
    CGRect frame = [[self contentView] frame];
    frame.size.width -= 20;
    [[self contentView] setFrame:frame]; 
}

使用 iOS 8 模拟器和 Xcode 6 GM 种子运行此代码时,会触发无限循环。但是,当在运行 iOS 8 GM 种子的真实 iPhone 或 iPad 上运行时,它不会像以前的 iOS 版本那样循环。

我首先认为差异是编译器优化,但模拟器在调试配置和发布配置中都会循环。

问题

  • 为什么iOS 8 GM和模拟器有区别?
  • 这是一个严重的错误修复吗?即使我无法在设备上重现它,我也非常不愿意发布具有潜在严重挂起错误的应用程序。
  • 在您看来,什么是重构它以消除循环而不导致 iOS 7 和 6 回归的最佳方法?
4

1 回答 1

4

这发生在我以前的 iOS 8 测试版之一中。发生在设备和模拟器上。经过一些调试后,我发现UITableViewCell可能在 iOS8 内部使用了自动布局。contentView.frame此外,触发的任何更改layoutSubviews(这也可能是您的无限循环的原因)。

作为一种解决方法,我向单元格添加了一个子视图contentView并对其进行了修改frame。然后我使用这个视图,就像我会使用的一样contentView(作为所有自定义单元格元素的超级视图)。

于 2014-09-11T14:59:01.323 回答