我的应用会对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那样循环播放。
我首先想到的不同之处在于编译器优化,但模拟器在调试配置和发布配置中都会循环。
问题
答案 0 :(得分:4)
这发生在之前的iOS 8测试版上。发生在设备和模拟器上。经过一些调试后,我发现UITableViewCell
可能在iOS8内部使用autolayout。此外,contentView.frame
触发layoutSubviews
的任何更改(这也可能是您无限循环的原因)。
作为解决方法,我在单元格的contentView
中添加了一个子视图,并修改了其frame
。然后我使用了这个视图,就像我使用contentView
一样(作为所有自定义单元格元素的超视图)。