58
задан 20 November 2014 в 13:55

1 ответ

Я столкнулся с подобной проблемой в своем проекте. Это только имеет поддержку портрета. Структура ViewController - то, что, Навигация содержала контроллер (я назвал A), и длинный Scrollview в контроллере. Мне нужен (портрет) подарок к B (альбомное право).

В начале я попробовал метод ниже, и это, казалось, работало, но в конечном счете я нашел ошибку в нем.

Swift 5 & iOS12

// In B controller just override three properties

override var shouldAutorotate: Bool {
    return false
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.landscapeRight
}

override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return .landscapeRight
}

И затем что-то становится странным. Когда контроллер B отклоняет контроллеру A. ScrollView в контроллере A двигали некоторая точка.

, Таким образом, я использовал другой метод, таким образом, я поворачиваю экран когда viewWillAppear. Вы видите код для этого ниже.

// In controller B
// not need override shouldAutorotate , supportedInterfaceOrientations , preferredInterfaceOrientationForPresentation

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let appDel = UIApplication.shared.delegate as! AppDelegate
    appDel.currentOrientation = .landscapeRight
    UIDevice.current.setValue( UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation")
    UIViewController.attemptRotationToDeviceOrientation()
}

//in viewWillDisappear rotate to portrait can not fix the bug


override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
    let appDel = UIApplication.shared.delegate as! AppDelegate
    appDel.currentOrientation = .portrait
    UIDevice.current.setValue( UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
    UIViewController.attemptRotationToDeviceOrientation() //must call 
    super.dismiss(animated: true, completion: nil)
}
// in AppDelegate
// the info plist is only supported portrait also, No need to change it

var currentOrientation : UIInterfaceOrientationMask = .portrait


func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return self.currentOrientation
}
0
ответ дан 1 November 2019 в 13:15

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

Похожие вопросы: