Я запустил следующий код в iOS 7 и iOS 8:
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight);
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f",
(landscape ? @"Yes" : @"No"),
[[UIScreen mainScreen] bounds].size.width,
[[UIScreen mainScreen] bounds].size.height);
Ниже приводится результат от iOS 8:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00
По сравнению с результатом в iOS 7:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00
Есть ли документация с указанием этого изменения? Или это временная ошибка в iOS 8 API?
Ответы:
Да, это зависит от ориентации в iOS8, а не ошибка. Вы можете просмотреть сессию 214 WWDC 2014 для получения дополнительной информации: «Просмотр достижений контроллера в iOS 8»
Цитата из презентации:
UIScreen теперь ориентирован на интерфейс:
источник
Да, это зависит от ориентации в iOS8.
Я написал метод Util для решения этой проблемы для приложений, которые должны поддерживать более старые версии ОС.
источник
Да, действительно, размер экрана теперь зависит от ориентации в iOS 8. Иногда, однако, желательно получить размер, фиксированный для портретной ориентации. Вот как я это делаю.
источник
Да, теперь это зависит от ориентации.
Я предпочитаю приведенный ниже метод получения размера экрана независимо от ориентации некоторым ответам выше, потому что он проще и потому что он не зависит от кода ориентации (состояние которого может зависеть от время, когда они вызваны) или на проверку версии. Возможно, вы захотите новое поведение iOS 8, но это будет работать, если вам нужно, чтобы он был стабильным на всех версиях iOS.
источник
В связи с этим вопросом, поскольку он решил мою проблему, вот два определения, которые я использую для расчета ширины и высоты экрана:
Если вы поддерживаете iOS 7 и iOS 8, это лучшее решение для этой проблемы.
источник
Вы можете использовать
nativeBounds
(независимо от ориентации)nativeBounds
Определение высоты устройства:
Определение ширины устройства:
источник
Это не ошибка в iOS 8 SDK. Они сделали границы интерфейса зависимыми. В соответствии с вашим вопросом о какой-либо ссылке или документации на этот факт, я настоятельно рекомендую вам посмотреть,
View Controller Advancements in iOS 8
что это 214 сессия WWDC 2014 . Самая интересная часть (согласно вашим сомнениям)Screen Coordinates
начинается в 50:45.источник
Да, это зависит от ориентации в iOS8.
Вот как вы можете получить последовательный способ считывания границ в стиле iOS 8 для версий SDK и OS.
источник
Мое решение - это сочетание MaxK и hfossli. Я сделал этот метод на категории UIScreen, и у него нет проверок версий (что является плохой практикой):
источник
Мне нужна была быстрая вспомогательная функция, которая сохраняла бы то же поведение, что и iOS7 под iOS8 - это позволяло мне обмениваться
[[UIScreen mainScreen] bounds]
звонками и не трогать другой код ...источник
Приведенный ниже метод может использоваться для определения границ экрана для заданной ориентации, независимо от версии iOS. Этот метод возвращает границы в зависимости от размера экрана устройства и дает одинаковое значение CGRect независимо от версии iOS.
источник
Вот что я использовал для вычисления правильного прямоугольника:
источник
Просто добавив быструю версию превосходной функции cbartel, отвеченной выше.
источник
Моя проблема была связана с рамкой UIWindows, которая собиралась в минус. Так сделал код как показано ниже в MyViewController - (NSUInteger)
И его работа для меня, попробуйте.
источник
iOS 8 или выше
Решение для тех, кто хочет узнать размер экрана в пунктах (3,5-дюймовый экран имеет 320 × 480 точек, 4,0-дюймовый экран имеет 320 × 568 точек и т. Д.)
источник
Одна вещь, которую я заметил, это то, что порядок поддерживаемых ориентаций интерфейса в Info.plist имеет значение. У меня возникла проблема этого вопроса с моим приложением (которое выполняет ориентацию в коде), но я нигде не указал, что ориентация по умолчанию - Портрет.
Я думал, что ориентация по умолчанию была Портретом в любом случае.
Перестановка itens в Info.plist, в первую очередь Portrait, восстановила ожидаемое поведение.
источник
Это даст правильное устройство в iOS7 и iOS8 ,
// Вы также можете добавить больше устройств (ieiPad).
источник
Использовал слегка модифицированное решение mnemia, которое без проверки версии iOS, используя min / max на границах главного экрана.
Мне нужно
CGRect
так получилCGRect
от границ и В начале изменилисьsize.width=min(w,h)
,size.height=max(w,h)
. Затем я вызвал эту независимую от ОСCGRect
функцию get в двух местах в моем коде, где я получал размер экранаOpenGL
, касался и т. Д. До исправления у меня было 2 проблемы - на IOS 8.x в ландшафтном режиме положениеOpenGL
отображения было неверным: 1 / 4 из полного экрана в левой нижней части. И второе касание вернуло недопустимые значения. Обе проблемы были исправлены, как объяснено. Спасибо!источник