Как узнать ширину и высоту экрана в iOS? - PullRequest
488 голосов
/ 15 апреля 2011

Как получить размеры экрана в iOS?

В настоящее время я использую:

lCurrentWidth = self.view.frame.size.width;
lCurrentHeight = self.view.frame.size.height;

в viewWillAppear: и willAnimateRotationToInterfaceOrientation:duration:

В первый раз я получаю весь размер экрана. Во второй раз я получаю экран без навигационной панели.

Ответы [ 16 ]

3 голосов
/ 19 ноября 2016

Если вы хотите ширину / высоту экрана независимо от ориентации устройства (подходит для определения размера только портретных контроллеров представления, запускаемых из альбомной ориентации):

CGFloat screenWidthInPoints = [UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale;
CGFloat screenHeightInPoints = [UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale;

[UIScreen mainScreen] .nativeBounds <- Из документов -> Ограничительный прямоугольник физического экрана, измеренный в пикселях. Этот прямоугольник основан на устройстве в портретной ориентации. Это значение не изменяется при вращении устройства.

2 голосов
/ 24 ноября 2015

Вот быстрый способ получить размеры экрана:

print(screenWidth)
print(screenHeight)

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

1 голос
/ 11 июля 2017

Современный ответ:

Если ваше приложение поддерживает разделенное представление на iPad, эта проблема становится немного сложнее. Вам нужен размер окна, а не экран, который может содержать 2 приложения. Размер окна также может изменяться во время работы.

Использовать размер главного окна приложения:

UIApplication.shared.delegate?.window??.bounds.size ?? .zero

Примечание. Приведенный выше метод может получить неправильное значение, прежде чем окно станет ключевым при запуске. если вам нужна только ширина, очень рекомендуется метод ниже :

UIApplication.shared.statusBarFrame.width

Старое решение с использованием UIScreen.main.bounds вернет границы устройства. Если ваше приложение работает в режиме разделенного просмотра, оно получит неправильные размеры.

self.view.window в самом горячем ответе может иметь неправильный размер, если приложение содержит 2 или более окон, а окно имеет небольшой размер.

1 голос
/ 04 апреля 2016

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

0 голосов
/ 19 мая 2017

Свифт 3.0

для ширины

UIScreen.main.bounds.size.width

для высоты

UIScreen.main.bounds.size.height
0 голосов
/ 10 ноября 2015

Вы можете поместить эти макросы в ваш файл pch и использовать их в любом месте проекта, используя "SCREEN_WIDTH"

#define SCREEN_WIDTH                ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height)

и "SCREEN_HEIGHT"

#define SCREEN_HEIGHT               ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation ==   UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width)

Пример использования:

CGSize calCulateSizze ;
calCulateSizze.width = SCREEN_WIDTH/2-8;
calCulateSizze.height = SCREEN_WIDTH/2-8;
...