我刚刚在使用 estimatedHeightForRowAtIndexPath 时发现了一个惊人的问题或违反直觉的行为
(1) 我的表格的行高变化很大。最终结果的范围从 111 到大约 400。
(2) 我绝对完美地计算了每一行的高度。我手头上有这些数组,也就是说已缓存。
{请注意,这显然是 Apple 工程师现在推荐的...例如,第 5 点 .. Using Auto Layout in UITableView for dynamic cell layouts & variable row heights
(3) 当 heightForRowAtIndexPath 请求高度时,我确实给了它绝对正确的高度。
(4) 当我构建单元格时,确实,我将它构建到完全正确的高度(如 (2) 和 (3) 中所示)。
{注意 - 当然最终调整单元格高度的是 iOS,而不是“我”。
这一切都很完美。
即,每个单元格都由 iOS 在 heightForRowAtIndexPath 中给定的高度精确构建。
现在,我添加代码...
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 120;
}
事实上,表格不再有效............行高变成随机的!!!
有人见过这种不可思议的行为吗?
我做了各种测试,试图确定 estimatedHeightForRowAtIndexPath 到底做什么之间的关系。起初,我认为它可能会提供高度的下限。所以,150 .. 即使是我的小单元格也会错误地设置为 150 高度。但事实并非如此。
我认为它可能会做这样的事情:假设您的 estimatedHeightForRowAtIndexPath 值为 150。它有时对行使用 150(事实上()证明是那个大小或更小,但有时它用于实际大小来自heightForRowAtIndexPath.
另一方面,如果您为 estimatedHeightForRowAtIndexPath 输入的值小于实际存在的值(例如在我的示例中为 100),它几乎“完全不起作用”,您只会得到看似单元格上的随机高度。
非常高的单元格似乎可以正常工作,也许类似于“如果 heightForRowAtIndexPath 的高度是估计值的两倍,那么它确实使用实际高度”
需要明确的是,它似乎永远不会使单元格太小,但通常会使它们太大。
需要说明的是,我没有使用自动布局,这是您只需要构建的单元格类型。 (恐怕我不知道这与自动布局有何关系。)这仅适用于 Xcode5/iOS7+。
最佳答案
更新的答案
经过进一步调查,事实证明“它只需要自动布局”是不正确的。我的示例代码需要自动布局。我对 DynamicHeightCell
进行了轻微修改,现在它可以使用或不使用自动布局。
原始答案
它只需要自动布局。确实不足为奇,但绝对应该记录在案。
这是一个演示 tableView:estimatedHeightForRowAtIndexPath:
正确使用自动布局的工作项目。如果您在 Storyboard 中关闭自动布局,它的行为将如您所述。
关于ios - estimatedHeightForRowAtIndexPath 实际上可以更改行的最终 "correct"高度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20238559/