自定尺寸的表格视图

问题描述 投票:4回答:2

首先这不是一个关于如何自动调整tableview内部单元格大小的问题,更多的是如何自动调整整个tableview的大小。

所以我有一个滚动视图,它有一个tableview和另外2个视图作为它的子视图。tableview的单元格已经自动调整了大小,这个问题又不是针对单个单元格的。但是,tableview根本没有调整大小。

我做了什么:1)设置tableview有上、下、前、后约束2)设置单元格启用自动布局3)*我在构建时不知道单元格的大小4)我已经禁用了tableview的滚动模式。

那么长话短说,如何才能顺着让tableview自己调整大小呢?

编辑

单元格中包含一个标签,这个标签可以有不同的文字行,因此,使用自动布局的单元格,就应该确定表格视图的高度。

下面的图片显示了视图的设置方式。

QuincholQuinchol 2

正如你所看到的,表格视图只是视图的一小部分,而且由于表格视图的滚动视图被停用,所以应该也不会出现任何滚动问题。

EDIT 2

其实应该是这样结束的,然而,我是自己计算的,每当我想对单元格做一个小小的改动时,整个计算单元格高度的代码都需要重写,要想让高度恰到好处,对我来说相当困难。

编辑3

到目前为止,我在tableview上有一个高度约束,我是手动计算的,然而删除这个约束,并试图让自动布局处理tableview高度大小,会产生以下错误。

Scroll View Need constraint for: Y位置或高度

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

ios swift uitableview autolayout
2个回答
0
投票

你不需要创建一个高度约束或设置框架什么的。创建一个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
投票

你可以改变你的 UITableView'stableview.frame = CGRect(x: <some_x>, y: <some_y>, width: <some_width>, height: <some_height>)

如果您的 UITableViewCells 使用自动布局,那么它们就应该调整大小,当 UITableView's 帧变化。

© www.soinside.com 2019 - 2024. All rights reserved.