Как получить размер экрана с помощью кода на iOS? - PullRequest
45 голосов
/ 03 сентября 2010

Как получить размер экрана iPhone для расчета?

Ответы [ 11 ]

98 голосов
/ 03 сентября 2010

Вы можете использовать свойство bounds в экземпляре UIScreen:

CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;  
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;

Большинству людей нужен главный экран; если у вас есть устройство, подключенное к телевизору, вы можете вместо этого перебрать UIScreens и получить границы для каждого.

Больше информации на UIScreen класс документов .

20 голосов
/ 01 марта 2015

Вот «быстрое» решение: (Обновлено для Swift 3.x)

let screenWidth  = UIScreen.main.fixedCoordinateSpace.bounds.width
let screenHeight = UIScreen.main.fixedCoordinateSpace.bounds.height

В отчетах указываются точки, а не пиксели, и «всегда отражают [s] размеры экрана устройства в портретной ориентации» (Apple Docs) . Не нужно беспокоиться о UInnoyinglyLongDeviceOrientation!

Если вы хотите, чтобы ширина и высота отражали ориентацию устройства:

let screenWidth  = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height

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

А вот как получить размер экрана, измеренный в пикселях , а не в точках:

let screenWidthInPixels = UIScreen.main.nativeBounds.width
let screenHeightInPixels = UIScreen.main.nativeBounds.height

Это также «основано на устройстве в книжной ориентации. Это значение не изменяется при вращении устройства». (Apple Docs)

Обратите внимание, что для быстрой версии 2.x и ниже следует использовать UIScreen.mainScreen() вместо UIScreen.main

8 голосов
/ 24 марта 2014

Используйте этот код для исправления в iOS8:

float SW;
float SH;
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (( [[[UIDevice currentDevice] systemVersion] floatValue]<8)  && UIInterfaceOrientationIsLandscape(orientation))
{
    SW = [[UIScreen mainScreen] bounds].size.height;
    SH = [[UIScreen mainScreen] bounds].size.width;
}
else
{
    SW = [[UIScreen mainScreen] bounds].size.width;
    SH = [[UIScreen mainScreen] bounds].size.height;
}
1 голос
/ 26 ноября 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
}

Они включены в качестве стандартной функции здесь .

Это также есть в документации.

1 голос
/ 18 сентября 2014
float screen_Height;
float screen_Width;

if ([[[UIDevice currentDevice] systemVersion] floatValue]  >= 8) {
    screen_Height = [[UIScreen mainScreen] bounds].size.height;
    screen_Width = [[UIScreen mainScreen] bounds].size.width;
} else {
    screen_Height = ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width);
    screen_Width = ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height);
}
1 голос
/ 24 марта 2014

Аналогично выше, но немного менее многословно:

CGFloat screenWidth = [[UIScreen mainScreen] bounds].size.width;
CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height;
1 голос
/ 03 сентября 2010

Используйте свойство bounds из UIView, если вы хотите знать размер определенного вида, или [[UIScreen mainScreen] bounds], если вы хотите узнать размер экрана устройства.

0 голосов
/ 26 марта 2019

Для собратьев Xamarians - вот способ, которым вы можете получить размер экрана в Xamarin.iOS + C #:

var screenBound = UIScreen.MainScreen.Bounds;
var screenSize = screenBound.Size;
var height = screenSize.Height;
var width = screenSize.Width;
0 голосов
/ 02 декабря 2014

Если вы хотите принять во внимание текущую ориентацию, используйте:

float screen_width;
float screen_height;
float vers = [[[UIDevice currentDevice] systemVersion] floatValue];
UIInterfaceOrientation orient = [UIApplication sharedApplication].statusBarOrientation;
if (vers < 8 && UIInterfaceOrientationIsLandscape(orient))
{
    screen_height = [[UIScreen mainScreen] bounds].size.width;
    screen_width = [[UIScreen mainScreen] bounds].size.height;
}
else
{
    screen_width = [[UIScreen mainScreen] bounds].size.width;
    screen_height = [[UIScreen mainScreen] bounds].size.height;
}
0 голосов
/ 20 июля 2014

Использование границ UIScreen - это хороший способ сделать это, но вы должны использовать функции CGGeometry для доступа к данным CGRect вместо прямого доступа к ним. См. CGGeometry документы .

CGRect screenBound = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = CGRectGetWidth(screenBound);
CGFloat screenHeight = CGRectGetHeight(screenBound);
...