ios - estimatedHeightForRowAtIndexPath 实际上可以更改行的最终 "correct"高度吗?

标签 ios uitableview ios7 heightforrowatindexpath

我刚刚在使用 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 中关闭自动布局,它的行为将如您所述。

Estimated Row Height Demo

关于ios - estimatedHeightForRowAtIndexPath 实际上可以更改行的最终 "correct"高度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20238559/

相关文章:

iphone - 我可以将一个对象插入到 NSDictionary 中吗?

ios - 将 iCloud 用于自定义同步协议(protocol)

ios - SQLite 与核心数据 : saving large amounts of data

ios - 当我展开和折叠 ios 中的 TableList 单元格时如何更改 UILabel 文本颜色

ios - 按钮上的 UITableViewCell 单击使用核心数据更新数据库属性值

ios - 使用反向地理定位按距离对列表进行排序

ios - 在没有 Segue 的情况下单击第一个 ViewController 上的按钮后更改第二个 ViewController 的标签文本

iOS7合并状态栏和工具栏

cocoa-touch - iOS 7 UINavigationController NavBar 每个 Controller 颜色动画

objective-c - 无法在 iOS7 中自定义 UIProgressView?