Сброс автоповорота в Xcode после принудительной альбомной ориентации в одном контроллере вида (swift 4) - PullRequest
0 голосов
/ 11 июня 2018

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

Чтобы принудительно установить эту ориентацию, я устанавливаю значение ориентации 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")

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

Есть ли способ определения «реальной ориентации устройства»?

Спасибо

1 Ответ

0 голосов
/ 07 июля 2019

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

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

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscape
}

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

...