Сброс автоповорота в Xcode после принудительной альбомной ориентации в одном контроллере вида (swift 4)

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

Чтобы форсировать эту ориентацию, я устанавливаю значение ориентации lanscape через AppDelegate:

AppDelegate.swift

var shouldSupportAllOrientation = true
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    if (shouldSupportAllOrientation == true){
       return UIInterfaceOrientationMask.all
    }
    return UIInterfaceOrientationMask.landscape
}

ViewController.swift

let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.shouldSupportAllOrientation = false
let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")

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

Есть ли способ определить "реальную ориентацию устройства"?

Спасибо

0 ответов

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

Попробуйте переопределить supportedInterfaceOrientations в ViewController.swift:

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscape
}

После этого, если вы откроете этот ВК, interfaceOrientation это пейзаж, но UIDevice.current.orientationнастоящий. Просто примечание: вы можете изменить ширину и высоту вашего представления, если вы работаете с фреймами и границами.

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