Comment get la taille d'un UIView à partir du View Controller?

Dans la méthode viewDidLoad d'un UIViewController:

 NSLog(@"frame: %f %f", self.view.frame.size.width, self.view.frame.size.height); 

Avec l'appareil en paysage:

 frame: 748.000000 1024.000000 

Avec l'appareil en portrait:

 frame: 768.000000 1004.000000 

Dans viewDidLoad , le cadre peut ne pas avoir été ajusté à toutes les choses qui affectent sa taille finale, comme la rotation, les autres vues, etc. Il est généralement préférable de ne créer et configurer que vos objects ici; vous pouvez inspecter l'image finalisée dans viewWillLayoutSubviews .

Il n'y a pas de taille du controller a vue. C'est la taille de la vue ou de la window. vous pouvez utiliser la méthode .frame ou .bounds pour l'get. Aussi, vous pouvez facilement imprimer le rect en utilisant,

 NSLog("Frame: %@", NSSsortingngFromCGRect(self.view.frame)); NSLog("Frame: %@", NSSsortingngFromCGRect(self.view.window.frame)); 

Vous pouvez également utiliser [UIScreen mainScreen].bounds pour get la taille de l'écran complet. Vous obtiendrez toujours ce décalage de 20 pixels dans la direction x ou y, pour la barre d'état, en fonction de votre orientation.

Quoi qu'il arrive, le cadre renvoie la hauteur et la largeur, en supposant que l'appareil est en mode portrait, avec le button d'accueil enfoncé. Ainsi, lorsque l'appareil est en mode paysage, la barre d'état est sur le côté droit et la largeur est inférieure de 20 pixels pour faire de la place pour la barre d'état.

Édité: Après iOS 8 Vous obtenez maintenant la largeur et la hauteur correctement en mode portrait et paysage. c'est-à-dire tel qu'il est – dans la largeur du paysage = hauteur du portrait. Quand j'utilise dans mon code,

 CGRect frame = [[UIScreen mainScreen] applicationFrame]; CGSize size = frame.size; if (![UIUtil isAfterIOS8]){ size.width = frame.size.height; size.height = frame.size.width; } /* UIUtil.m */ + (BOOL) isAfterIOS8 { return [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0; } 

Vous devriez utiliser self.view.bounds place.

Vous pouvez le connecter comme:

 NSLog(@"My view's frame is: %@", NSSsortingngFromCGRect(myView.frame)); 

Ou essayez ceci

 CGFloat width = CGRectGetWidth(self.view.bounds); CGFloat height = CGRectGetHeight(self.view.bounds); 

Ou

 CGFloat height = [self.view frame].size.height; CGFloat width = [self.view frame].size.width; 

C'est la taille actuelle de la vue principale dans votre controller de vue. Les vues sont mesurées en points.

Notez que la taille de l'écran iPad en points est 1024×768, mais la taille que vous obtenez dans le NSLog est sans la barre d'état en haut, qui est de 20 points de hauteur.