iOS8 中引入了可自动调整大小的表格视图单元(WWDC Session 226 What's new in table and collection views)。在我的项目中,我正在尝试实现旧的固定行高行为。此外,对我来说最重要的是cell.contentView
在左侧和右侧插入带有边距的默认框架。因此,我更改了cell.contentView.frame
属性,然后立即-[cell setNeedsLayout]
调用该方法,这导致单元格陷入无限layoutSubviews
循环。
重现步骤:
创建新的单视图项目并将默认视图控制器替换为表视图控制器
禁用表格视图自动高度计算
-(void)viewDidLoad {
[super viewDidLoad];
self.tableView.estimatedRowHeight = 0;
self.tableView.rowHeight = 44;
}
3. 在故事板的表格视图中拖放一个自定义单元格,
将任何子视图添加到自定义单元格:,
子类化单元格并更改
contentView.frame
,layoutSubviews
构建并运行。
结果:模拟器最终出现黑屏,卡在无限布局子视图循环中。
预期结果:模拟器显示一个contentView
带有自定义框架的单元格的表格视图。
评论:在调试的过程中,我发现如果单元格上没有任何自定义子视图,则可以避免无限循环。因此,在满足以下条件后,似乎会出现该错误:
self.tableView.estimatedRowHeight = 0; self.tableView.rowHeight = 44;
cell.contentView.frame = CGRectMake(...)
cell have custom subviews dropped on it in xib or storyboard
苹果在 iOS8 的“已知问题”列表中没有这个问题,所以我想知道它实际上是 iOS8 中的一个错误还是有人知道如何解决这个问题?