我有一個tableView,上面有一個標簽(約束條件:對齊中心x,對齊頂部20)。
一個按鈕在底部(約束條件:對齊中心x,對齊底部到50)。
而tableView在這兩個物件之間通過頂部/底部對齊到20.
。我試圖讀出tableView的高度,因為根據我使用的設備,高度應該有所不同? 但是如果我在我的代碼中使用以下內容,我總是得到相同的tableView的高度。
列印結果總是616.
。我錯過了什么/沒有正確理解?
我錯過了什么/沒有正確理解?
@IBOutlet weak var tableView。UITableView!
override func viewDidLoad() {
super.viewDidLoad()
print(tableView.frame.size.height)
}
CodePudding
試著把你的高度寫進去
override func viewWillLayoutSubviews() {
print(tableView.frame.size.height)
}
uj5u.com熱心網友回復:
當你的視圖控制器從故事板中創建時,所有的初始框架都等于你的故事板中選擇的框架,所以它們將只對故事板中選擇的設備正確
。你第一次可以訪問真正的框架是在第一個layoutSubviews之后,所以你需要這樣:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print(tableView.frame.size.height)
}
查看更多關于視圖生命周期的資訊 這里
p.s. 當你重寫某些東西時,不要忘記呼叫super.方法,你可能會輕易破壞一些東西。除非檔案中這樣說,或者你真的知道你在做什么
uj5u.com熱心網友回復:
試試這個方法吧
override func viewWillLayoutSubviews() {
super.viewDidLayoutSubviews()
print(tableView.frame.size.height)
}
你看到兩個不同的列印值的原因是這個方法在viewdidload之后被呼叫,并且在所有自動布局或自動調整視圖大小的計算被應用之后再次被呼叫。這意味著每次視圖尺寸發生變化并且視圖布局被重新計算時,都會呼叫viewDidLayoutSubviews方法。
關于這個問題的更多資訊,請參考
。 Apple 關于 viewdidlayoutsubviews 的檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311739.html
標籤:
上一篇:搜索程序中沒有加載搜索表視圖

