Iphone: получить текущие размеры или размеры экрана

Здравствуйте, я хочу получить ширину и высоту моего основного вида. Я хочу правильное значение в ландшафтном или портретном режиме. Я пробовал следующее:


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

Они дают 300 в пейзаже и 320 в портретном режиме, да, это больше в портретном режиме. Итак... мое представление занимает весь экран (- строка состояния), поэтому я ожидаю 480 в альбомном режиме и 320 в портретном режиме. Что случилось с остальными пикселями. Нужно ли мне жестко кодировать эти значения? Спасибо.

Ответ 1

Работает ли для вас одна из следующих строк?

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

Я полагаю, вы можете вычесть высоту строки состояния? Может быть, я не понимаю ваш вопрос.

Ответ 2

Попробуйте следующее:

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

Ответ 3

Полезные макросы, которые дадут вам правильный размер на основе ориентации устройства:

#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)

Ответ 4

Я думаю, что лучше всего использовать:

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

Предполагая, что я в приведенном выше примере является UIViewController. В любом случае метод frameForOrientation ожидает тип UIInterfaceOrientation.