Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自动调整UITableViewCell的大小:更改自定义单元格内视图的高度_Ios_Objective C_Uitableview_Autosize - Fatal编程技术网

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

Ios 自动调整UITableViewCell的大小:更改自定义单元格内视图的高度,ios,objective-c,uitableview,autosize,Ios,Objective C,Uitableview,Autosize,我寻找了很多解决方案,但找不到任何解决这个特殊情况的方法 我在UITableView中创建了一个自定义单元格,这些元素从上到下按顺序排列,并带有约束: 图像视图(限制顶部屏幕、固定宽度、固定高度、水平居中) 顶部标签(约束顶部图像视图,固定宽度,水平居中)线设置为0 视图(约束顶部标签,固定宽度,水平居中)高度设置为0 按钮(约束俯视图、固定宽度、固定高度、水平居中) 底部标签(约束顶视图、约束底屏幕、固定宽度、固定高度、水平居中) 如果我为顶部标签插入很长的文本,单元格的高度也会自动正确调

我寻找了很多解决方案,但找不到任何解决这个特殊情况的方法

我在UITableView中创建了一个自定义单元格,这些元素从上到下按顺序排列,并带有约束:

  • 图像视图(限制顶部屏幕、固定宽度、固定高度、水平居中)
  • 顶部标签(约束顶部图像视图,固定宽度,水平居中)线设置为0
  • 视图(约束顶部标签,固定宽度,水平居中)高度设置为0
  • 按钮(约束俯视图、固定宽度、固定高度、水平居中)
  • 底部标签(约束顶视图、约束底屏幕、固定宽度、固定高度、水平居中)
如果我为顶部标签插入很长的文本,单元格的高度也会自动正确调整

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

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

还有别的办法吗

提前谢谢 啤酒

编辑:


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

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

为tableView委托实现此方法:
tableView:HeightforRow索引路径:

编辑:对于希望UIKit自动计算高度的自动调整单元格,我建议研究UITableView自动调整尺寸

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

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

当我想将单元格的高度更改为100时,我可以按如下操作:

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

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

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

当我想将单元格的高度更改为100时,我可以按如下操作:

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

对BeginUpdate和EndUpdate的调用迫使tableView再次布局其单元格,从而扩展或收缩单元格。请注意,我实际上是在调用单元格自己的
setSelected:animated:
函数中的前两行,以及表视图控制器的
tableView:didSelectCellAtIndexPath:
方法中的其余两行。这会在选定单元格时扩展单元格。

这可能是一个解决方案,但我认为在iOS8中,使用单元格的自动调整大小,我可以避免这种方法,直接更改视图的高度以使单元格自动调整大小。我认为您将自动布局误认为自动调整大小是两个不同的概念。表视图的单元格不调整大小,这就是sdk提供委托方法的原因。据我所知,iOS 8仍然是一样的。你应该接受答案,让其他人知道这是解决这个常见问题的潜在解决方案。你不应该使用heightForRowAtIndexPath自动调整单元格大小。这可能是一个解决方案,但我认为在iOS 8中,使用单元格自动调整大小,我可以避免这种方法,直接改变视图的高度,使单元格自动调整大小。我认为你把自动布局误认为是自动调整大小,这是两个不同的概念。表视图的单元格不调整大小,这就是sdk提供委托方法的原因。据我所知,iOS 8仍然是一样的。你应该接受这个答案,让其他人知道这是这个常见问题的潜在解决方案。你不应该将HeightForRowatineXpath用于自动调整单元格大小。非常感谢你给出了这个完美的答案!我只花了2个小时来找到这个解决方案!非常感谢你给我这个完美的答案!我只花了2个小时来找到这个解决方案!