, je trouve toujours mon auto aux prises avec la bonne solution.force mise en page automatique de mise à jour Aussi simple que cela pourrait être cadre UIView correctement à viewDidLoad
J'essaie de comprendre ce qui est le bon façon de trouver le cadre REALUIView
(ou tout autre sous-vue) à l'intérieur viewDidLoad
lors de l'utilisation Mise en page automatique.
Le problème principal est que, dans viewDidLoad, les vues ne sont pas appliquées à leurs contraintes. Je sais que le « connu » réponse à cette situation est
override func viewDidLoad() {
super.viewDidLoad()
view.layoutIfNeeded()
stepContainer.layoutIfNeeded() // We need this Subview real frame!
let realFrame = stepContainer.frame
}
Mais je trouve que cela ne fonctionne pas toujours, et de temps en temps, il cadre mal de donner (et non la dernière image qui est affichée).
Après quelques plus pour la recherche que je trouve que le gauchissement ce code sous DispatchQueue.main.async { }
donne des résultats précis. Mais je ne suis pas sûr que ce soit la bonne façon de gérer cela, ou est-ce que je suis en train de créer des problèmes sous-jacents. Code final "travail":
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.async {
self. stepContainer.layoutIfNeeded()
print(self. stepContainer.frame) // Real frame..
}
}
NOTE: Je dois trouver ce qui est le cadre réel que de viewDidLoad, s'il vous plaît ne suggère pas utiliser viewDidAppear/layoutSubviews etc.
viewDidLoad n'est pas l'endroit idéal pour mettre en place des choses qui exigent des connaissances des cadres, c'est la raison pour laquelle vous rencontrez ce problème – trapper
@trapper Je suis au courant de cela. En raison d'un scénario spécifique que je dois résoudre ce (et il est résoluble) .. Je fais juste que je l'ai résolu la bonne façon –
Qu'est-ce que vous ARME essaie de faire avec le cadre tôt dans le cycle de vie de la vue? –