自我调整tableview

时间:2017-06-04 21:56:57

标签: ios swift uitableview autolayout

首先,这不是关于如何自动调整tableview中单元格大小的问题,而是如何自动调整整个tableview的大小。

所以我有一个scrollview,它有一个tableview和另外两个视图作为它的子视图。 tableview的单元格已经自动调整大小,同样这个问题与单个单元格无关。但是,tableview根本没有调整大小。

我做了什么: 1)将tableview设置为具有top,bottom,leading和trailing约束 2)将单元格设置为启用自动布局 3)*我不知道构建时的单元格大小 4)我在tableview上禁用了滚动模式

这么长的故事简短,我怎样才能让tableview自行调整大小?

修改

单元格包含可以有各种文本行的标签,因此使用自动布局的单元格应该确定表格视图的高度。

以下图片显示了视图的设置方式:

Quinchol Quinchol 2

正如您所看到的,tableview只是视图的一小部分,并且由于tableview的scrollview被取消激活,因此应该存在任何滚动问题。

编辑2

这实际上它应该如何结束,但是,我自己计算这个,每次我想对单元格做一个小的改变,整个代码,计算单元格的高度,需要重写,它是我很难让高度恰到好处。

编辑3

到目前为止,我在tableview上有一个高度限制,我手动计算,但是删除此约束并尝试让自动布局处理tableview高度大小会产生以下错误:

  

滚动查看   需要约束:Y位置或高度

因此我可以得出结论,tableview不知道如何根据自动布局的单元格自动计算高度。

2 个答案:

答案 0 :(得分:2)

您无需创建高度限制或设置框架。创建UITableView的子类,并在每次intrinsicContentSize更改(又称为添加或删除新数据)时重新计算其contentSize。这就是您所需要的:

class SelfSizingTableView: UITableView {
    override var contentSize: CGSize {
        didSet {
            invalidateIntrinsicContentSize()
            setNeedsLayout()
        }
    }

    override var intrinsicContentSize: CGSize {
        let height = min(.infinity, contentSize.height)
        return CGSize(width: contentSize.width, height: height)
    }
}

答案 1 :(得分:-1)

您可以使用UITableView's

更改tableview.frame = CGRect(x: <some_x>, y: <some_y>, width: <some_width>, height: <some_height>)框架

如果您的UITableViewCells使用自动布局,则应在UITableView's框架更改时调整大小。