Je suis un nouveau développeur iOS.
J'utilise la mise en page automatique.
J'ai un problème. Je ne peux pas obtenir la taille réelle d'UIView après les contraintes.
Exemple, quand je veux obtenir la taille de UIView
avec une contrainte
self.container.frame.size.height
Il retourne toujours 550 pour toutes les tailles d'appareils. Mais je peux voir qu'il a une taille différente lorsque je l'exécute sur un appareil différent.
Merci
La solution la plus simple consiste à simplement exécuter ce code dans -viewDidAppear:
(après l'exécution de la mise en page automatique).
Avant votre "obtention d'un code de taille réelle", insérez le code suivant:
[view setNeedsLayout];
[view layoutIfNeeded];
Puisque tout le monde suppose que l'accès se fait via une UIViewController
et non à l'intérieur d'une sous-classe UIView
, les réponses ne s'avèrent pas vraiment utiles. La bonne façon d'obtenir la taille correcte d'une sous-classe UIView
est dans layoutSubviews
.
Vous pouvez simplement utiliser la méthode UIView
intrinsicContentSize
que vous pouvez lire sur https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//Apple_ref/occ/instm/UIView/intrinsicContentSize
C'est génial.
Si vous souhaitez obtenir un cadre sans utiliser la méthode layoutsubviews pendant l'utilisation de la mise en page automatique, utilisez celle-ci:
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
})
On dirait que - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;
est ce que vous recherchez:
Valeur de retour
La taille de la vue qui satisfait les contraintes qu'elle contient.Discussion
Détermine la meilleure taille de la vue en tenant compte de toutes les contraintes qu'elle contient et de celles de ses sous-vues.
[voir layoutIfNeed] sauvez-moi.
Utilisez cette méthode pour forcer la disposition des sous-vues avant de dessiner. En utilisant la vue qui reçoit le message comme vue racine, cette méthode présente la sous-arborescence de vue en commençant à la racine.
Après avoir invoqué cette méthode, je peux obtenir la taille réelle de la vue personnalisée dans xib. Merci beaucoup à @Allen et à l'auteur.
Le meilleur moment est pendant le viewDidLayoutSubviews
car il se produit avant le viewDidAppear
donc vous pouvez toujours faire quelques modifications avant que la vue ne soit affichée.