2011-01-06 12 views
30

Ciao, voglio ottenere la larghezza e l'altezza della mia vista principale. Voglio il valore corretto in modalità orizzontale o verticale. Ho provato la seguente:Iphone: ottieni dimensioni della vista o dimensioni dello schermo attuali


    NSLog(@"aaa %f", [UIScreen mainScreen].applicationFrame.size.width); 
    NSLog(@"zzz %f", self.view.frame.size.width); 

Questi danno 300 nel paesaggio e 320 in modalità verticale, sì, è più grande in modalità verticale. Quindi ... la mia vista occupa tutto lo schermo (- barra di stato) quindi mi aspetto 480 in modalità orizzontale e 320 in modalità verticale. Cosa è successo al resto dei pixel. Devo hardcode questi valori? Grazie.

risposta

91

Una delle seguenti linee funziona per te?

[[UIScreen mainScreen] bounds].size.height 
[[UIScreen mainScreen] bounds].size.width 

Suppongo che sia possibile sottrarre l'altezza della barra di stato? Forse non sto capendo la tua domanda

+1

Questo funziona restituisce la stessa larghezza e altezza per entrambi gli orientamenti, ma almeno funziona. E sì, ho bisogno di sottrarre la barra di stato. –

+0

@Omar hai bisogno di un '' 'prima di UIScreen. –

+0

Hmm, immagino che BrianV lo abbia modificato per correggerlo (quando dici "modificato", suona come una balbuzie; p). Grazie, devo averlo perso. – Omar

9

Prova questo:

UIWindow* window = [UIApplication sharedApplication].keyWindow; 
NSLog(@"%f",window.frame.size.width); 
+0

questo funziona anche. Questo include anche l'altezza della barra di stato. È lo stesso per tutte le rotazioni. Grazie. –

+0

thanks -works great se devi supportare lo schermo da 3.5 e 4.0 pollici –

-4

penso che il migliore è quello di utilizzare:

CGRect frame = [[UIScreen mainScreen] frameForOrientation:self.interfaceOrientation]; 

Supponendo sé nell'esempio di cui sopra è un UIViewController. In ogni caso, il metodo frameForOrientation prevede un tipo UIInterfaceOrientation.

+5

Uh .. Non ho un metodo simile per 'UIScreen' .. ho bisogno di qualcos'altro? –

+2

il metodo non esiste nemmeno per me. – cyrilchampier

5

macro utili che vi darà la dimensione corretta in base all'orientamento del dispositivo:

#define SCREEN_WIDTH ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height) 
#define SCREEN_HEIGHT ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width) 
+0

funziona come il fascino :) – Swati

+0

questo è super utile – Jordan

Problemi correlati