web-dev-qa-db-fra.com

Comment obtenir UIView en taille réelle avec la mise en page automatique

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

27
Chicken

La solution la plus simple consiste à simplement exécuter ce code dans -viewDidAppear: (après l'exécution de la mise en page automatique).

15
Oxcug

Avant votre "obtention d'un code de taille réelle", insérez le code suivant:

[view setNeedsLayout];
[view layoutIfNeeded];
46
Allen

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.

17
Leandros

Vous pouvez simplement utiliser la méthode UIViewintrinsicContentSize

enter image description here

que vous pouvez lire sur https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//Apple_ref/occ/instm/UIView/intrinsicContentSize

10
Abizern

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));
    })
7
SamSol

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.

https://developer.Apple.com/documentation/uikit/uiview/1622624-systemlayoutsizefittingsize?language=objc

7
Dustt

[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.

1
Chiakie

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.

1
Zaphod