获取tableView的高度

get height of a tableView

我在顶部的标签之间有一个 tableView(约束:对齐中心 x,对齐顶部到 20)。

底部有一个按钮(约束:对齐中心 x,将底部对齐到 50)。

并且 tableView 在这两个对象之间对齐 top/bottom 到 20。

我正在尝试读取 tableView 的高度,因为根据我使用的设备不同高度应该不同? 但是如果我在我的代码中使用下面的代码,我总是得到相同的 tableView 高度。

打印结果总是616。

我missing/not 理解正确吗?

 @IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    print(tableView.frame.size.height)
}

试着让你的身高在

override func viewWillLayoutSubviews() {
    print(tableView.frame.size.height)
}

当您的视图控制器是从情节提要中创建时,所有初始帧都等于您的情节提要中选择的帧,因此它们仅对情节提要中选择的设备是正确的

第一次访问真实帧是在第一次 layoutSubviews 之后,所以你需要这个:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print(tableView.frame.size.height)
}

查看有关视图生命周期的更多信息here

p.s。较新的忘记在覆盖某些内容时调用 super. 方法,您可能很容易破坏某些内容。除非文档这么说或者你真的知道你在做什么

试试这个方法

override func viewWillLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print(tableView.frame.size.height)
}

您看到打印出两个不同值的原因是因为此方法在 viewdidload 之后立即调用,并在对视图应用所有自动布局或自动调整大小计算后再次调用。这意味着每次视图大小更改和视图布局重新计算时都会调用方法 viewDidLayoutSubviews。

有关这方面的更多信息,请参阅
Apple documentation on viewdidlayoutsubviews