it-swarm.com.ru

IPhone/IPad: Как программно получить ширину экрана?

Привет, мне интересно, есть ли способ получить ширину программно. 

Я ищу что-то достаточно общее, чтобы вместить iphone 3gs, iphone 4, ipad. Кроме того, ширина должна меняться в зависимости от того, является ли устройство книжным или альбомным (для ipad).

Кто-нибудь знает, как это сделать? Я долго искал ... спасибо! 

79
foreyez

Взгляните на UIScreen .

например.

CGFloat width = [UIScreen mainScreen].bounds.size.width;

Посмотрите на свойство applicationFrame, если вы не хотите, чтобы строка состояния была включена (не влияет на ширину).

UPDATE: Оказывается, UIScreen (-bounds или -applicationFrame) не учитывает текущую ориентацию интерфейса. Более правильным подходом было бы спросить у вашего UIView его границы - при условии, что этот UIView был автоматически повернут его контроллером View.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    CGFloat width = CGRectGetWidth(self.view.bounds);
}

Если представление не поворачивается автоматически контроллером представления, вам нужно проверить ориентацию интерфейса, чтобы определить, какая часть границ представления представляет «ширину» и «высоту». Обратите внимание, что свойство frame даст вам прямоугольник представления в координатном пространстве UIWindow, которое (по умолчанию) не будет учитывать ориентацию интерфейса. 

192
Alan Rogers
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);
11
thyrgle

Это можно сделать в в 3 строки кода :

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];
6
memmons

Начиная с iOS 9.0, нет надежного способа ориентирования. Это код, который я использовал для приложения, которое я проектирую только для портретного режима, поэтому, если приложение открыто в ландшафтном режиме, оно все равно будет точным:

screenHeight = [[UIScreen mainScreen] bounds].size.height;
screenWidth = [[UIScreen mainScreen] bounds].size.width;
if (screenWidth > screenHeight) {
    float tempHeight = screenWidth;
    screenWidth = screenHeight;
    screenHeight = tempHeight;
}
0
Bobby

использовать:

NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
0
Nick

Используйте этот код, это поможет 

[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width
0
Shahzaib Maqbool