动态tableView高度的模糊布局

时间:2017-11-28 18:21:32

标签: ios swift uitableview autolayout nslayoutconstraint

我有一个viewController,我想在其中有两个1 tableView和一个childViewController。

  • tableView不可滚动,具有动态单元格高度。 (我正在使用tableView,所以我可以折叠行)
  • childVC是一个具有动态单元格高度的可滚动tableView。

我的约束如下:

NSLayoutConstraint.activate([
   tableView.topAnchor.constraint(equalTo: view.topAnchor),
   tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
   tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
   tableView.bottomAnchor.constraint(equalTo: artistVC.view.topAnchor),

])

NSLayoutConstraint.activate([
   artistVC.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
   artistVC.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
   artistVC.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])

当我以这种方式设置时,屏幕上只显示childVC。我没有看到tableView。我想让tableView尽可能多地扩展,然后让childVC可以滚动到底部。

  • 对于tableView我得到:Height and scrollable content size are ambiguous
  • 对于childVC的观点,我得到:Height and vertical positions are ambiguous

但是我不能自己设置高度,因为我不知道tableViewCell的高度是什么。

有什么建议吗?我试过改变内容拥抱和内容压缩阻力,但我没有找到任何运气。

1 个答案:

答案 0 :(得分:2)

表视图和其他可滚动视图没有intrinsicContentSize。例如,如果参与的观看次数是UIImageViewUILabel,则可以根据其内容调整大小,但因为您的观看次数为UITableViewUIView(两者都不能自动调整大小,尽管你对UIView有足够的限制而不是模糊不清)你需要自己调整大小。

要获得所需的行为,您需要子类UITableView并覆盖intrinsicContentSize,否则您需要设置高度约束。无论哪种方式,您都需要自己计算正确的高度。内容拥抱和压缩阻力允许自动布局在竞争intrinsicContentSizes之间进行判断,因此他们在这种情况下没有帮助。

例如:

final class SizingTableView: UITableView {
    override var intrinsicContentSize: CGSize {
        return CGSize(width: bounds.width, height: <# Some appropriate height #>)
    }
}

然后在您的storyboard或xib中将表视图的类更改为SizingTableView,您可以在大小检查中为表视图的内在内容大小设置设计时占位符,以解决任何警告我们的错误