儘可能簡單,我仍然發現自己正努力尋找正確的解決方案。強制自動佈局以正確更新UIView框架viewDidLoad
我想了解什麼是使用自動佈局時,發現裏面viewDidLoad
的REALUIView
(或任何其他子視圖)框架正確方式。
主要問題是,在viewDidLoad中,視圖不會應用它們的約束。我知道,「已知」答案這種情況
override func viewDidLoad() {
super.viewDidLoad()
view.layoutIfNeeded()
stepContainer.layoutIfNeeded() // We need this Subview real frame!
let realFrame = stepContainer.frame
}
但我發現它並不總是工作,並且不時給它的錯誤幀(即不顯示的最後一幀)。
經過一番研究,我發現在DispatchQueue.main.async { }
下翹曲這段代碼給出了準確的結果。但我不確定這是否是正確的方式來處理這個問題,或者我是否正在使用這種方式引發某些內部問題。最後的「工作」代碼:
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.async {
self. stepContainer.layoutIfNeeded()
print(self. stepContainer.frame) // Real frame..
}
}
注:我需要找到的是隻能從viewDidLoad中真正的框架,請不建議使用viewDidAppear/layoutSubviews等
viewDidLoad不是設置需要框架知識的地方,這就是爲什麼你有這個問題 – trapper
@trapper我意識到這一點。由於一個特定的場景,我需要解決這個問題(它是可以解決的)..我只是確保我已經以正確的方式解決了這個問題 –
你在這個視圖的生命週期早期嘗試使用框架來做什麼? –