shouldAutorotate() が呼ばれない
問題
[UITabViewController]->[UINavigationController]->[UIViewController]という構造になっているとき、UIViewControllerを継承したViewの中で
override var shouldAutorotate: Bool{
return false
}
を書いても、画面が回転してしまう。
UIViewControllerが回っていなくても、その下にあるUITabViewControllerとUINavigationControllerが回ってしまっているからだ。
解決方法
これをどこかに追記する。ちなみにshouldAutorotate以外にも個人的に書いておいたほうがいいと思ってるものも入ってる。
extension UINavigationController {
open override var shouldAutorotate: Bool {
guard let viewCtrl = self.visibleViewController else{return true}
return viewCtrl.shouldAutorotate
}
open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
guard let viewCtrl = self.visibleViewController else{return .all}
return viewCtrl.supportedInterfaceOrientations
}
}
extension UITabBarController{
open override var shouldAutorotate: Bool {
guard let viewCtrls = self.viewControllers else{return true}
return viewCtrls[selectedIndex].shouldAutorotate
}
open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
guard let viewCtrls = self.viewControllers else{return .all}
return viewCtrls[selectedIndex].supportedInterfaceOrientations
}
}
コメント
UINavigationControllerのextensionを追記するのはどのサイトでも出てきたけど、UITabBarControllerがあるのが盲点だった。ちょっと書き方が複雑だったように思う。
上の書き方はSwift3.0だけど、Swift2系なら
open override var なになに: なになに{
を
public override func なになに() -> なになに{
に書き換えればいい。
Author And Source
この問題について(shouldAutorotate() が呼ばれない), 我々は、より多くの情報をここで見つけました https://qiita.com/on0z/items/7aa819db752b42b02c46著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .