【问题标题】:Correctly sizing UITableViewCell with Autolayout, dynamic cell sizing and expanding cells使用自动布局、动态单元格大小和扩展单元格正确调整 UITableViewCell 的大小
【发布时间】:2015-03-20 12:16:23
【问题描述】:

我在将自动布局与动态单元格调整大小以及在选中时单元格增长相结合时遇到问题。

我当前的实现在未选中状态下将单元格设置为高度 70。它采用 AutoLayout 布局,隐藏了额外的信息,从 71 像素到 220 像素:

Normal cell label
----------------   70px
UILabel
UITextView
UIButton
----------------   220px

在这种情况下,展开的信息使用 AutoLayout 定位在普通单元格标签下方。

扩展信息中的 UITextView 应该增长以适应内容,将单元格的大小增加到 220 像素以上。

我在 heightForRow 中计算此值,方法是使单元格出列、配置它并使用 systemLayoutSizeFittingSize: 询问其高度。

不幸的是,这在大约 75% 的情况下无法为我提供正确的尺寸。例外情况是:

 1. I load the normal cell and tap to expand.
 2. I then scroll down, and scroll back up to the expanded cell.
 3. The expanded cell is now the correct height after recycling (still expanded) 

我听说 systemLayoutSizeFittingSize: 需要从上到下 AutoLayout 约束,但我不能强制执行底部约束,因为这意味着这些元素在未展开状态下是可见的。

问题似乎源于 AutoLayout,事实上它在大多数情况下都不会产生正确的尺寸,即使使用 setNeedsLayout 和 layoutIfNeeded 也是如此。

在大多数情况下,我一直在使用以下教程:http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout

【问题讨论】:

  • 也许这会有所帮助:stackoverflow.com/questions/18746929/…
  • 谢谢 - 我一定会研究 PureLayout。然而,他们回答的问题是基于 UITableViewCell 的,选择时高度没有扩展。我以前有这个工作。然而,随着扩展,没有 AutoLayout 约束将子视图固定到 .contentView 的底部。我相信这会在尝试使用 AutoLayout 方法获取视图高度时带来问题。

标签: ios objective-c uitableview autolayout


【解决方案1】:

你累了吗

[tableView reloadData]

[tableView reloadRowsAtIndexPaths:<#(NSArray *)#> withRowAnimation:<#(UITableViewRowAnimation)#>]

单元格需要重新布局,因此当您向下滚动和向后滚动时,单元格会被回收并在重新布局时正确确定其高度。

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多