ios - UITableView里面UITableViewCell高度问题

标签 ios swift uitableview uitableviewautomaticdimension

View Heirarchy

所以基本上,我想嵌入一个 UITableView里面UITableViewCell .

我用过UIStackView使用其 AutoLayout力量!

无论如何,“Inner UITableView”的每一行都将包含一个固定大小的 UIImageView和一个 UILabellines = 0 (即不固定)

UIStackView (水平)-> UIImageView + UILabel

Requirements:

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

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

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

Problem:

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

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

  • 将 UITableVIew 的初始高度限制设置为 10(某个随机数),estimatedRowHight对于 InnerTableView 为 50,因此将 UITableView 的高度设置为 tableViewInsideCellHeightConstraint?.constant = tableViewInsideCell.contentSize.height这在某种程度上给了我一些空间,但当行的高度超过估计高度 40
  • 时它仍然不可靠

The problem

附注layoutIfNeeded()被触发为 TableView , StackViewParentCell

I also have another way of solving the above problem:

  1. 使用估计高度,将常数(estimatedHeight)乘以要显示的行数,即列表大小
  2. 更改heightConstraint对于 Inner UITableView与计算出来的,
  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 出现明显的抖动:[

Question:

针对上述问题,有什么具体的解决办法吗? 我尝试一遍又一遍地搜索它......无法真正找到任何强有力的修复!

最佳答案

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

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

它对我来说运行良好,希望对您有所帮助。

关于ios - UITableView里面UITableViewCell高度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56125813/

相关文章:

swift - 创建可以使用图像作为填充的绘图应用程序的最佳方法

ios - 上下文类型 NSIndexSet 不能与 Swift 2.x 的数组文字一起使用

swift - 将 Int 保存到核心数据中的正确方法?

objective-c - 为 UIButton 添加背景阴影

ios - 更好的可点击表格 View 单元格的可访问性标签

swift - UITableViewController 复制数组的重新排序?

iphone - 以编程方式滚动具有加速和减速功能的 UITableView

swift - 保存到核心数据时 NSFetchedResultsController 不更新

ios - 我的应用程序在 iOS 模拟器中不显示任何内容

iphone - 如何在旋转开始前显示 UIActivityIndi​​catorView