繁体   English   中英

UITableView内部UITableViewCell高度问题

[英]UITableView inside UITableViewCell height issues

查看Heirarchy

所以基本上,我要嵌入UITableViewUITableViewCell

我用UIStackView来使用它的AutoLayout电源!

无论如何, “Inner UITableView”的每一行都包含一个固定大小的UIImageViewlines = 0 UILabel lines = 0 (即不固定)

UIStackView (水平) - > UIImageView + UILabel

要求:

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

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

另外: estimatedHeight可以在40点左右。

问题:

动态调整大小的InnerTableView导致其cellForRowAt方法不被调用一次,因此不允许UIStackView由于contentSize没有变化而增加其长度。

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

  • 为UITableView的初始高度限制设置为10(一些随机数), estimatedRowHight为InnerTableView为50,从而建立的UITableView的高度tableViewInsideCellHeightConstraint?.constant = tableViewInsideCell.contentSize.height这在某种程度上给了我一定的空间,但它仍然是不可靠的,当一排的高度超过估计的高度40

问题

PS layoutIfNeeded()是为TableViewStackViewParentCell触发的

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

  1. 使用估计的高度,将常数(estimatedHeight)乘以要显示的行数,即列表大小
  2. 使用计算的内容更改Inner UITableView heightConstraint
  3. 每次迭代,计算UITableView的总“必需”高度(使用+=visibleCells[i].frame.height )(因为每次迭代将提供单元格的大小(内容大小)
  4. 更新Inner UITableView的高度约束
    if heightForTableView == nil {
        if indexPath.row == listDict!.count - 1 {
          var heightOfTableView: CGFloat = 0.0
          let cells = tableView.visibleCells
          for visibleCells in cells {
            heightOfTableView += visibleCells.frame.height
          }
          let newHeight = heightOfTableView + cell.frame.height
          reloadMe(newHeight)
        }
      }

以上修复导致UI中的可见混蛋:[

题:

上述问题有没有具体的解决方案? 我试着一遍又一遍地搜索它..真的找不到任何强有力的修复!

当您在subTableView中 调用数据api时 ,您可以尝试如下:

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

它对我来说很好,我希望它会对你有所帮助。

好,所以你正在建立一个聊天应用程序。 这改变了我的一些建议。

所以要回答你的问题,你可以遵循这样的事情:在iOS 7中替换不推荐使用的sizeWithFont: 使用sizeWithAttributes:计算文本的大小sizeWithAttributes: 添加所有标签高度(如果图像将更大,计算出来)并使用它来尝试计算tableview的固定高度,那么它将完全显示列表。 这不是tableview的理想情况。

就个人而言,我会看看松弛处理它的方式。 您可以让每个选项在消息之后单独显示为新的气泡或单元格,或者在单个单元格中有一堆按钮,而不是在文本气泡中包含选项。

这是一个standbot(来自他们的网站)的例子,显示了一个带有按钮集合的单元格,可能是堆栈视图或滚动视图。 这可能是一种更容易实现它的方法,而不是在tableview中使用tableview 在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM