Как получить размеры экрана в iOS?
Проблема с кодом, который вы разместили, заключается в том, что вы рассчитываете на размер представления, соответствующий размеру экрана, и, как вы видели, это не всегда так. Если вам нужен размер экрана, вы должны посмотреть на объект, который представляет сам экран, например:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
Обновление для разделенного просмотра: В комментариях Дмитрий спросил:
Как я могу получить размер экрана в режиме разделенного просмотра?
Приведенный выше код сообщает размер экрана, даже в режиме разделенного экрана. Когда вы используете режим разделенного экрана, окно вашего приложения меняется. Если приведенный выше код не дает ожидаемой информации, то, как и OP, вы смотрите не на тот объект. В этом случае, однако, вы должны смотреть на окно вместо экрана, например так:
CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;
Swift 4.2
let screenRect = UIScreen.main.bounds
let screenWidth = screenRect.size.width
let screenHeight = screenRect.size.height
// split screen
let windowRect = self.view.window?.frame
let windowWidth = windowRect?.size.width
let windowHeight = windowRect?.size.height
[UIScreen scale]
.CGRectGetWidth()
иCGRectGetHeight()
вместо прямого доступа кsize
полю в прямоугольнике. Я не думаю, что это когда-либо будет проблемой в отношении прямоугольника экрана, но я полагаю, что об этом нужно знать.Осторожно, [UIScreen mainScreen] также содержит строку состояния, если вы хотите получить фрейм для вашего приложения (исключая строку состояния), вы должны использовать
источник
return [[UIScreen mainScreen] bounds].size.width;
Я перевел некоторые из приведенных выше ответов Objective-C на код Swift. Каждый перевод сопровождается ссылкой на оригинальный ответ.
Главный ответ
Простой ответ функции
Ориентация устройства Ответ
Журнал Ответ
источник
return UIScreen.mainScreen().bounds].size.width
Я использовал эти удобные методы раньше:
источник
Я понимаю, что это старый пост, но иногда я нахожу его полезным для #define констант, подобных этим, поэтому мне не нужно беспокоиться об этом:
Вышеуказанная константа должна возвращать правильный размер независимо от ориентации устройства. Тогда получить размеры так же просто, как:
источник
Очень легко получить размер вашего устройства, а также принять во внимание ориентацию:
источник
UIAlertView
вставит себя как представление rootViewController keyWindow. У меня есть логика, которая избегает углового случая, потому что, если представление предупреждения включено, пользователь не может взаимодействовать с клавиатурой, поэтому обычно нет необходимости захватывать кадр клавиатуры в это время.Мы также должны учитывать ориентацию устройства:
источник
источник
Здесь я обновил для Swift 3
applicationFrame устарела из iOS 9
В быстрой версии они удалили () и несколько изменили соглашение об именах, вы можете обратиться сюда Ссылка
источник
Современный ответ:
если ваше приложение поддерживает разделенное представление на iPad, эта проблема немного усложняется. Вам нужен размер окна, а не экран, который может содержать 2 приложения. Размер окна также может меняться во время работы.
Используйте размер главного окна приложения:
Примечание. Приведенный выше метод может получить неправильное значение, прежде чем окно станет ключевым при запуске. если вам нужна только ширина, очень рекомендуется метод ниже :
Использование старого решения
UIScreen.main.bounds
вернет границы устройства. Если ваше приложение работает в режиме разделенного просмотра, оно получит неправильные размеры.self.view.window
в самом горячем ответе может получиться неправильный размер, когда приложение содержит 2 или более окон, а окно имеет небольшой размер.источник
Используйте их,
Structs
чтобы узнать полезную информацию о текущем устройстве в Swift 3.0источник
Если вы хотите ширину / высоту экрана независимо от ориентации устройства (подходит для определения размера только портретных контроллеров, запускаемых из альбомной ориентации):
источник
Вот быстрый способ получить размеры экрана:
Они включены в качестве стандартной функции в:
https://github.com/goktugyil/EZSwiftExtensions
источник
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
источник
Swift 3.0
для ширины
для высоты
источник
Вы можете поместить эти макросы в ваш файл pch и использовать их в любом месте проекта, используя "SCREEN_WIDTH"
и "SCREEN_HEIGHT"
Пример использования:
источник