自动调整UITableViewCell:更改自定义单元格内视图的高度

时间:2014-11-27 18:18:24

标签: ios objective-c uitableview autosize

我搜索了很多解决方案,但找不到任何解决这个特殊情况的东西。

我在UITableView中创建了一个自定义单元格,这些元素从顶部按顺序排列:

  • imageview(约束顶部屏幕,固定宽度,固定高度,居中水平)
  • top-label(约束顶部imageview,固定宽度,居中水平)行设置为0。
  • 视图(约束顶部标签,固定宽度,居中水平)高度设置为0.
  • 按钮(约束俯视图,固定宽度,固定高度,居中水平)
  • 底部标签(约束俯视图,约束底部屏幕,固定宽度,固定高度,居中水平)

单元格的高度自动调整正确,如果我为顶部标签插入文本很长。

现在我想在按钮上附加一个动作以启用视图高度调整,就像手风琴一样。所以我试图改变高度没有成功,如果我重新加载tableview,任何改变。 我试图设置一个约束到视图的高度,但如果我改变所有内容移动但单元格的高度不会改变。

我可以让视图更改高度的唯一方法是设置表格的行高度,但是这会更改表格的所有单元格,而我只想打开一个单元格的视图。

还有其他办法吗?

提前致谢 麦酒

修改

对于间隙,我已经使用noobular建议的委托方法解决了,将视图设置为0高度允许在单元格的高度发生变化时进行扩展。

2 个答案:

答案 0 :(得分:7)

我通过这些方法取得了类似的效果。首先,我确定一个表示单元格高度的约束。我正在使用左侧装饰条的高度限制,该装饰条固定在单元格的顶部和底部。重要的是,此约束属于一个对象,该对象是单元格内容视图的子级,并且在打开和关闭状态下都将显示在屏幕上。此约束连接到它将控制的单元格上的属性。

当我想改变单元格的高度,即100,我可以这样做:

cell.heightConstraint.constant = 100.0
cell.layoutIfNeeded()
tableView.beginUpdates()
tableView.endUpdates()

对beginUpdates和endUpdates的调用强制tableView再次布局其单元格,从而扩展或收缩单元格。请注意,我实际上是在单元格自己的setSelected:animated:函数中调用前两行,而在表视图控制器的tableView:didSelectCellAtIndexPath:方法中调用其余两行。这具有在选择单元格时扩展单元格的效果。

答案 1 :(得分:-2)

编辑:对于你希望UIKit自动计算高度的单元格的自动调整大小,我建议研究UITableViewAutomaticDimension

为tableView委托实现此方法: 的tableView:heightForRowAtIndexPath: