【发布时间】:2019-04-01 20:03:46
【问题描述】:
我面临以下问题:
- 我有一个容器视图,它有 tableView,tableView 包含单元格和页脚
- 在页脚中,我有 UIView,其中包含另一个带有单元格的 tableView(这在 PageBoy 中是不透明的,因为由于 tableView 内容的日期,我必须更改选项卡)
我想达到什么目标?
我想调整 tableView 页脚的大小以适应它的 tableView 的内容。
我正在做什么来实现这一目标?
我准备了一些研究,我开发了 ResizableTableView ,代码如下:
class ResizableTableView: UITableView {
override var intrinsicContentSize: CGSize {
layoutIfNeeded()
return contentSize
}
func reloadData(with completion: @escaping () -> ()) {
animator.animate(withDuration: 0, options: [], animations: {
self.reloadData()
self.invalidateIntrinsicContentSize()
}, completion: { _ in
completion()
})
}
}
问题是在第一次加载视图时没有正确调整大小 - tableView contentSize 没有给我完整的高度,内容被剪切。
也许,任何人在将 tableView 的高度与其内容匹配时都有类似的问题。我读过很多类似的问题,但没有一个与我的问题相符。
我试图重新加载 tableView 数据,然后通过委托告诉我的 viewController 调整 tableView 页脚的大小,但这在第一次加载时也失败了。单元格通过自动布局调整大小 - 这可能是此实现中的一个关键问题。
【问题讨论】:
-
你能覆盖
contentSize属性并在didSet中调用invalidateIntrinsicContentSize()吗? -
而不是依靠
UITableVIew为您提供contentSize,您应该计算尺寸,因为您已经拥有单元格高度和项目数的信息。 -
这是优化的,因为您不需要首先渲染 UITableView 来获取大小。
-
可能我无法计算大小,因为单元格的高度不同。此外,我尝试调用 ``` invalidateIntrinscicContentSize() ``` 但它也未能返回正确的大小。
标签: swift autolayout tableview