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

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

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

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

Ответ 1

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

например.

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

Взгляните на свойство applicationFrame, если вы не хотите включать строку состояния (не влияет на ширину).

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

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

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

Ответ 2

CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);

Ответ 3

Это можно сделать в в 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];

Ответ 4

Как и в 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;
}

Ответ 5

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

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

Ответ 6

Вот быстрый способ получить размеры экрана, это также учитывает текущую ориентацию интерфейса:

var screenWidth: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.width
    } else {
        return UIScreen.mainScreen().bounds.size.height
    }
}
var screenHeight: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.height
    } else {
        return UIScreen.mainScreen().bounds.size.width
    }
}
var screenOrientation: UIInterfaceOrientation {
    return UIApplication.sharedApplication().statusBarOrientation
}

Они включены как стандартная функция в:

https://github.com/goktugyil/EZSwiftExtensions