我有一个UINavigationController
的应用。应用程序需要允许屏幕旋转,具体取决于当前位于导航堆栈顶部的UIViewController
。为此,我实现了AppDelegate
方法,如下所示。基本上它允许轮换,但如果我们显示.portrait
,则会将内容限制为FooViewController
。
/// Return .all, unless FooViewController is being displayed
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if let nav = window?.rootViewController as? UINavigationController,
let top = nc.topViewController {
if top is FooViewController {
return .portrait
}
}
return .all
}
除非FooViewController
是UITableViewController
,否则效果很好。在这种情况下,如果我有这样的导航堆栈:
FooViewController > BarViewController
...然后我将Bar
轮播到横向,然后点按返回,Foo
也将保持横向状态。永远不会调用AppDelegate
方法。
如果Foo
不一个UITableViewController
,那么返回工作就像你想要的那样 - 调用AppDelegate
方法,然后返回.portrait
,当您从Bar
导航回Foo
时,屏幕会旋转回纵向。
那么,UITableViewController
是什么导致系统停止调用AppDelegate方法来检查支持的方向?