使用Autolayout,动态单元大小调整和扩展单元格正确调整UITableViewCell的大小

时间:2015-01-21 20:36:17

标签: ios objective-c uitableview autolayout

我遇到了将Autolayout与动态细胞大小调整相结合并在选择时让细胞增长的问题。

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

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

在这种情况下,扩展信息的定位是AutoLayout低于正常的单元格标签。

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

我在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

1 个答案:

答案 0 :(得分:0)

你累了吗

[tableView reloadData]

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

需要再次布置单元格,因此当您向下滚动并向上移动时,单元格会被回收并在再次布局时正确确定其高度。