当UITableViewController在导航堆栈

时间:2016-11-29 21:54:39

标签: ios uinavigationcontroller ios10 screen-orientation

我有一个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
}

除非FooViewControllerUITableViewController,否则效果很好。在这种情况下,如果我有这样的导航堆栈:

FooViewController > BarViewController

...然后我将Bar轮播到横向,然后点按返回Foo也将保持横向状态。永远不会调用AppDelegate方法。

如果Foo 一个UITableViewController,那么返回工作就像你想要的那样 - 调用AppDelegate方法,然后返回.portrait,当您从Bar导航回Foo时,屏幕会旋转回纵向。

那么,UITableViewController是什么导致系统停止调用AppDelegate方法来检查支持的方向?

0 个答案:

没有答案