UITableViewCell里面的UITableView高度问题

时间:2019-05-14 08:13:24

标签: ios swift uitableview uitableviewautomaticdimension

View Heirarchy

因此,基本上,我想在UITableView内嵌入UITableViewCell

我使用UIStackView来发挥其AutoLayout的力量!

无论如何,“内部UITableView” 的每一行都将由大小固定的UIImageViewUILabel的{​​{1}}(即不固定)组成

lines = 0(水平)-> UIStackView + UIImageView

  

要求:

  • 由于服务器提供了随机文本,因此InnerTableView的每行/单元格的大小应该是动态的。从而使整个内部UILabel的高度达到UITableView
  • 内部automaticDimension上方UILabel的文本也是动态的。 (因此首先使用UITableView有意义)

注意:主要UIStackView 由多个不同类型的单元格组成(这基本上是一个BotChatBot)

也:UITableView可以达到40点左右。

  

问题:

动态调整InnerTableView的大小会导致其estimatedHeight方法不会被调用一次,因此由于cellForRowAt的不变而导致UIStackView的长度无法增加。

为了解决上述问题,我尝试:

  • 将UITableVIew的初始高度限制设置为10(某个随机数),将InnerTableView的初始高度约束设置为contentSize为50,从而将UITableViewew的高度设置为estimatedRowHight,这虽然给了我一些空间,但仍然没有当连续高度超过估计高度40
  • 时,显示可靠

The problem

tableViewInsideCellHeightConstraint?.constant = tableViewInsideCell.contentSize.heightlayoutIfNeeded()TableView触发了PS StackView

  

我还有另一种解决上述问题的方法:

  1. 使用估计的高度,将常数(estimatedHeight)乘以要显示的行数,即列表大小
  2. ParentCell的{​​{1}}更改为计算出的值{
  3. 对于每次迭代,请计算UITableView的总“必需”高度(使用heightConstraint)(因为每次迭代将提供单元格的大小(内容大小)
  4. 更新Inner UITableView的高度约束
+=visibleCells[i].frame.height

上面的修复导致UI中出现明显的混蛋:[

  

问题:

以上问题是否有具体解决方案? 我试图一遍又一遍地搜索它。.真的找不到任何强大的解决方案!

2 个答案:

答案 0 :(得分:0)

当您调用api 以获取 subTableView 中的数据时,可以尝试如下操作:

self.tvCell?.table.reloadData() //tv cell is my Parent TableViewCell
self.table.beginUpdates() //Parent TableView
self.table.endUpdates() // Parent TableView

对我来说一切正常,希望对您有帮助。

答案 1 :(得分:0)

好的,所以您正在构建一个聊天应用程序。那改变了我的一些建议。

因此要回答您的问题,您可以执行以下操作:Replacement for deprecated sizeWithFont: in iOS 7?sizeWithAttributes:计算文本的大小。将所有标签高度相加(计算出图像是否更大),然后使用该标签高度尝试为表格视图计算固定高度,那么它将完全显示列表。对于表视图来说,这确实不是理想的情况。

我个人将看一下松弛处理此问题的方式。除了在文本提示框内包含选项之外,您还可以使每个选项在出现消息后单独显示为新的提示框或单元格,或者在单个单元格中具有一堆按钮。

这是一个站立机器人的示例(来自他们的网站),其中显示一个带有按钮集合的单元格,可能在堆栈视图或滚动视图中。这可能是比在tableview中包含tableview更为简单的方法 enter image description here