在我的应用程序中,我有一个带有自定义表格视图单元格的表视图。在 iOS5 中,我使用以下代码段来获取自定义单元格的正确高度。在iOS6中执行[tableView reloadData]之后,[cell layoutIfNeeded]将不会触发单元格layoutSubViews方法。因此,细胞高度被错误计算。对于这个原因有什么好的建议吗?或者可能是其他方式吗?
- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath];
[cell setNeedsLayout];
[cell layoutIfNeeded];
[cell sizeToFit];
return cell.frame.size.height;
}
答案 0 :(得分:1)
您的代码段在表视图生命周期方面存在基本错误。如果它适用于iOS 5或您声称的任何地方,您可能只是幸运。
首先,tableView:heightForRowAtIndexPath:
被称为tableView:cellForRowAtIndexPath:
之前。此时,NO细胞存在。你不应该在这里打电话给UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath];
。
为了布局tableView的子视图(假设它是视图控制器的顶级视图),您可以覆盖视图控制器的viewWillLayoutSubviews
方法。这就是Apple的建议。
为了布置表格视图单元格的子视图,您可以继承UITableViewCell并覆盖其layoutSubviews
方法。