iOS Отключение Пейзаж LaunchScreen.storyboard

У меня есть LaunchScreen.storybaord это показывает логотип (текстовый, так что это независимость от ориентации). Приложение всегда запускается в портретной ориентации, но у него есть определенные контроллеры представления, которые допускают альбомный режим (поэтому создание только портретной ориентации приложения не вариант).

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

Есть ли способ сказать, что раскадровка должна быть только портретной?

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

3 ответа

Решение

Есть несколько подходов для достижения этой цели. Мой любимый, хотя, чтобы указать в Info.plist

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>

И переопределите это после того, как приложение завершит запуск внутри AppDelegate

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return [.allButUpsideDown]
}

Источник: https://developer.apple.com/library/archive/technotes/tn2244/_index.html

Помимо ответа Sunil, вам необходимо удалить значение из «Настройки сборки».

Нажмите на навигатор проекта, затем нажмите на цель -> выберите проект> нажмите на общие -> информация о развертывании, и вы увидите ниже вид

Отметьте здесь ориентацию устройства, которую вы проверили при создании проекта, и отметьте нужную ориентацию. Это будет работать.

ИЛИ ЖЕ

Вы можете использовать приведенный ниже код в ViewDidLoad:

NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), name:  Notification.Name("UIDeviceOrientationDidChangeNotification"), object: nil)

Затем создайте одну функцию, как показано ниже

@objc func orientationChanged() {

    if(UIDeviceOrientationIsLandscape(UIDevice.current.orientation)){

        print("landscape")
    }

    if(UIDeviceOrientationIsPortrait(UIDevice.current.orientation)){

        print("Portrait")
    }

}
Другие вопросы по тегам