2010-11-11 5 views
4

J'ai une sous-classe UIViewController dont la vue est configurée dans un fichier NIB. La vue a une sous-vue UIScrollView. L'UIScrollView occupe presque tout son fichier NIB entier mais sa vue d'ensemble est ajoutée en tant que sous-vue à une vue beaucoup plus petite (configurée dans une autre NIB) - par ex. le UIScrollView est 80% de la hauteur de sa propre NIB mais ne représente que 10% de la hauteur de la fenêtre de l'application. Lorsque j'appelle [scrollView bounds] .size.height dans la méthode viewDidLoad du viewController, j'obtiens la hauteur du scrollView par rapport à sa propre NIB, plutôt que la hauteur à laquelle il finit par le redimensionner comme dicté par ses aperçus (par ex. 80% de la hauteur de la fenêtre au lieu de 10%).Les limites UIScrollView n'ont pas encore été redimensionnées dans "viewDidLoad"

Si j'appelle [boundView bounds] .size.height plus tard (par exemple pour gérer un événement de rotation), j'obtiens la valeur correcte.

Comment puis-je obtenir la valeur correctement redimensionnée initialement?

Répondre

7

Avez-vous essayé de traiter avec viewWillAppear: ou viewDidAppear?

+0

L'utilisation de "viewDidAppear" a fonctionné. Dans le contrôleur de vue "principal", j'alloue et lance le contrôleur de vue "scroll" (dont la NIB inclut le UIScrollView). Après avoir ajouté la vue du contrôleur de vue défilante en tant que sous-vue de la vue du contrôleur de la vue principale, j'ai appelé viewDidAppear sur le contrôleur de vue de défilement et j'ai géré la récupération des limites à cet endroit. Merci! –

0

En supposant que je suis, il doit y avoir un certain point après que le contrôleur de vue est chargé à laquelle vous attrapez le .view et l'insérez dans l'autre sous-vue? Si oui, les limites seront alors ajustées. Vous ne pouvez pas les obtenir dans viewDidLoad car la vue n'a aucun moyen de savoir ce que vous en ferez dans le futur. Même si votre appel pour l'insérer comme sous-vue est la première chose que vous faites après avoir chargé le contrôleur de vue, c'est l'accesseur de vue qui provoquera le chargement de la vue et par conséquent viewDidLoad, avant que vous ayez placé la vue . Comme les bounds ont un getter et un setter, ils devraient être compatibles avec le codage valeur-clé, auquel cas vous pouvez utiliser viewDidLoad pour enregistrer un observateur sur des limites et faire ce que vous devez faire lorsque les limites changent.

Questions connexes