2011-01-06 15 views
30

Witam chcę uzyskać szerokość i wysokość mojego widoku głównego. Chcę mieć poprawną wartość w trybie poziomym lub pionowym. Próbowałem następujących rzeczy:Iphone: Pobierz bieżące wymiary widoku lub wymiary ekranu


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

Dają one 300 w krajobrazie i 320 w trybie pionowym, tak jest większy w trybie portretu. Więc ... mój widok zajmuje cały ekran (- pasek stanu), więc oczekuję 480 w trybie poziomym i 320 w trybie pionowym. Co stało się z resztą pikseli. Czy muszę kasować te wartości? Dzięki.

Odpowiedz

91

Czy któraś z poniższych linii działa dla Ciebie?

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

Przypuszczam, że można odjąć wysokość paska stanu? Może nie jestem zrozumienia Twoje pytanie

+1

Powoduje, że zwraca tę samą szerokość i wysokość dla obu orientacji, ale przynajmniej działa. I tak, muszę odjąć pasek stanu. –

+0

@Omar potrzebujesz ekstra '[' before UIScreen. –

+0

Hmm, myślę, że BrianV zredagował to, żeby to naprawić (kiedy mówisz "edytuj to", to brzmi jak jąkanie; p). Dzięki, musiałem to przegapić. – Omar

9

Spróbuj tego:

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

Działa to również. Obejmuje to również wysokość paska stanu. To samo dotyczy wszystkich obrotów. Dzięki. –

+0

dzięki - świetny jeśli potrzebujesz obsługi ekranu 3,5 i 4,0 cala –

-4

myślę, że najlepiej jest użyć:

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

Zakładając siebie w powyższym przykładzie jest UIViewController. W każdym przypadku metoda frameForOrientation oczekuje typu UInterfaceOrientation.

+5

Uh .. Nie mam takiej metody dla 'UIScreen' .. czy potrzebuję czegoś innego? –

+2

ta metoda też nie istnieje dla mnie. – cyrilchampier

5

Przydatne makra, które dadzą Ci odpowiedni rozmiar opartej na orientacji urządzenia:

#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

działa jak urok :) – Swati

+0

to jest super pomocna – Jordan

Powiązane problemy