IPhone / IPad: Как получить ширину экрана программно? - PullRequest
79 голосов
/ 07 сентября 2010

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

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

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

Ответы [ 7 ]

196 голосов
/ 07 сентября 2010

Взгляните на 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, которое (по умолчанию) не будет учитывать ориентацию интерфейса.

11 голосов
/ 07 сентября 2010
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);
6 голосов
/ 29 марта 2013

Это можно сделать в в 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];
0 голосов
/ 16 февраля 2018

использование:

NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
0 голосов
/ 02 июня 2017

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

[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width
0 голосов
/ 29 февраля 2016

Начиная с 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 голосов
/ 24 ноября 2015

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...