Основные границы UIScreen не учитывают фактический размер экрана устройства.

Я хотел создать проект без каких-либо раскадровок.

Я удалил раскадровки Main и LaunchScreen.

Как обычно я добавил в свое приложениеDidFinishLaunchingWithOptions:

        window = UIWindow(frame: UIScreen.main.bounds
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()

Теперь в настройках проекта -> Общие, если я оставлю файл экрана запуска пустым, UIScreen.main.bounds будет

(CGRect) $R12 = (origin = (x = 0, y = 0), size = (width = 320, height = 480))

И я получаю следующий экран:

введите здесь описание изображения

Теперь, если я добавлю что-то в поле Launch Screen File, в Info.plist -> Список свойств информации появится новая строка с ключом Launch screen interface file base name, и границы будут правильными. Границы верны, даже если значение пустое.

Почему наличие Launch screen interface file base name влияет на границы UIScreen?


person Makaronodentro    schedule 29.01.2019    source источник


Ответы (1)


Это началось в iOS 8.0, когда был выпущен iPhone 6/6plus (пользователь TheFuquan прокомментировал, что это началось с выпуском iPhone 5), в 2014 году. Тогда, если вы хотели поддерживать такие новые устройства, вам обязательно нужно было, как и требовалось, добавить правильный экран запуска. Либо через статическое изображение с разными размерами для каждого устройства, которое вы поддерживаете, либо через xib/storyboards.

Вы уже ответили на свое замешательство. Способ исправить это — предоставить правильный экран/изображение запуска.

Руководство Apple по человеческому интерфейсу (экран запуска): https://developer.apple.com/design/human-interface-guidelines/ios/icons-and-images/launch-screen/

person Glenn Posadas    schedule 29.01.2019
comment
На самом деле все началось с того, что первый iPhone 5 поднялся с высоты 480 до 568. - person TheFuquan; 30.01.2019
comment
Что меня расстраивает, так это то, что вам даже не нужно предоставлять правильное изображение экрана запуска. Пока ключ базового имени файла интерфейса экрана запуска существует в Info.plist, UIScreen может вычислить его границы. - person Makaronodentro; 30.01.2019
comment
Вы либо устанавливаете наборы изображений экрана запуска, либо предоставляете это базовое имя файла интерфейса экрана запуска в настройках проекта Xcode (или Info.plist, как вы упомянули). - person Glenn Posadas; 30.01.2019