首页 文章

当设备在横向上加载/显示时,如何“强制”以纵向显示视图?

提问于
浏览
1

我在我的iOS应用程序中支持所有方向和自动旋转,但我在这样的视图控制器中实现了 shouldAutorotate 方法:

- (BOOL)shouldAutorotate
{
   return NO;
}

并且它肯定会阻止视图在加载或以纵向显示时旋转到横向 . 但是当加载视图控制器或看起来设备已经处于横向状态时,视图将以横向显示 .

无论设备的方向如何,我如何从头开始加载/使视图以纵向显示?

谢谢

2 回答

  • 1

    您可以使用方法 supportedInterfaceOrientations() 来指定特定视图控制器的可用方向 .

    但是,当您将视图控制器嵌入导航堆栈时,系统会在导航控制器上调用 shouldAutorotatesupportedInterfaceOrientations ,并忽略视图控制器返回的值 .

    我使用 UINavigationController 的子类来从顶视图控制器获取支持的方向 . 你也可以为 UITabBarViewController 创建这样一个类

    class SingleOrientationNavigationController: UINavigationController {
    
        //MARK : Orientation
        override func shouldAutorotate() -> Bool {
            if let topVC = topViewController {
                return topVC.shouldAutorotate()
            }
            return false
        }
    
        override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
            if let topVC = topViewController {
                return topVC.supportedInterfaceOrientations()
            }
            return UIInterfaceOrientationMask.Portrait
        }
    
        // MARK : Status bar
        override func preferredStatusBarStyle() -> UIStatusBarStyle {
            if let topVC = topViewController {
                return topVC.preferredStatusBarStyle()
            }
            return .Default
        }
    }
    

    请注意,如果推送的视图控制器的旋转选项少于前一个,则可能会出现一些问题 .

    让我们考虑两个视图控制器:

    A : only portrait
    B : all orientation
    

    如果从A到B执行推动,那么它就可以了,B可以根据需要旋转,即使B在流行时处于横向状态,你也会回到A纵向 .

    但是如果在B处于横向状态时从B到A执行推送,则A也将显示为横向!一种解决方法是使用模态视图控制器,而不是在这种特殊情况下推送它 .

  • 0

    可以通过在应用程序的 .plist 中添加 Initial interface orientation = Portrait (bottom home button) 来完成 .

    plist image

相关问题