我的应用程序将 UITableViewCell 和机具 layoutSubviews 修改单元格的 contentView 的宽度,如下所示:
UITableViewCell
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测试版上。发生在设备和模拟器上。经过一些调试,我发现 UITableViewCell 可能在iOS8内部使用自动布局。此外 contentView.frame 触发的,触发的 layoutSubviews (这可能也是无限循环的原因)。
contentView.frame
作为解决方法,我向单元格的 contentView 并修改了其 frame 相反然后我使用这个视图,就像使用 内容视图 (作为所有自定义单元格元素的超级视图)。
frame
内容视图