如何"强迫"当设备在横向上加载/显示时,视图是否以纵向显示?

时间:2015-12-08 08:56:12

标签: ios uiview uiviewcontroller orientation autorotate

我支持iOS应用中的所有方向和自动旋转,但我希望某些视图控制器不能在横向上显示他们的视图。我在这样的视图控制器中实现shouldAutorotate方法:

- (BOOL)shouldAutorotate
{
   return NO;
}

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

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

由于

2 个答案:

答案 0 :(得分: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也将显示为横向!一种解决方法是使用模态视图控制器,而不是在这种特殊情况下推送它。

答案 1 :(得分:0)

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

plist image