シンプルなので、私は自分自身が正しい解決策で苦労していることがわかります。viewDidLoadでUIViewフレームを正しく更新するための強制自動レイアウト
私は、自動レイアウトを使用した場合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私はこれを知っています。特定のシナリオのために、私はこれを解決する必要があります(解決できます)。私はそれを正しい方法で解決したことを確認しています。 –
ビューのライフサイクルの早い段階でフレームと何をしようとしていますか? –