iOS计算单元格的高度

时间:2016-02-04 08:14:57

标签: ios objective-c uitableview

我对Apple的动态调整单元格有一个问题,因此我的单元格布局的逻辑不像切割和干燥,只是几个堆叠的UILabel。

因此,我无法真正使用他们提供的动态调整大小选项,因此我需要使用NSString boundingRect方法手动计算单元格的高度。

这很好 - 它可以工作,但我最终需要存储很多常量来跟踪我的自动布局限制。我觉得这对于我应该为自动布局做什么是违反直觉的,所以我不确定这是否是实现heightForRowAtIndexPath的正确方法。

我基本上必须将我的约束复制到一个常量中,然后在类方法中使用这些值来生成我的高度。 Apple对UITableViewAutomaticDimension如何工作提供了很少的内部见解,但很明显,在布局之前仍然计算单元格的高度。因此,除非我知道之前调用了哪些方法,否则我无法真正添加任何复杂的逻辑。

关于我应该做什么,或者我的方法是否合适的任何想法?

3 个答案:

答案 0 :(得分:0)

我可以提供的常见解决方案是为您的单元格添加高度约束,并根据您的需要更改约束,无论它们是什么。 UITableViewAutomaticDimension会自动将单元格调整为您使用此约束指定的高度。

答案 1 :(得分:0)

如果您的表格单元格是自定义的,那么如果您使用configureCell之类的方法并从cellForRowAtIndexPath将indexPath传递给它,则会更容易,然后根据您拥有的数据确定布局并查看位置你想要放置左右标签。完成此存储后,模型中所需的高度或者可能是与表具有相同行数的另一个数组,并使用它在heightForRowAtIndexPath中返回。

这更容易,并且为您提供了灵活性,而无需过多地使用表视图的委托方法。将布局逻辑集中在一个地方。 另一种方法是覆盖表视图单元格的layoutSubviews并计算其高度并存储它。

答案 2 :(得分:0)

如果要为tableview单元格指定默认高度,可以使用UITableViewDelegate中的estimatedHeightForRowAtIndexPath:。根据Apple指南:

//使用estimatedHeight方法快速计算猜测值,这将允许表的快速加载时间。 //如果实现了这些方法,上面的-tableView:heightForXXX调用将被推迟到视图准备好显示,因此可以放置更昂贵的逻辑。