10

因此,我想将主页的方向锁定为纵向,并且仅限主页。

我正在使用标签栏控制器,所以初始视图是标签控制器,但首先出现的视图控制器是第一个标签,例如主页。

我想这样做,以便当用户旋转设备时,它不会在此页面上旋转到横向。但是,所有其他页面都可以旋转。

搜了一圈,似乎没有什么是 iOS 7 特有的,而 iOS 7 特有的那个不行……</p>

请帮忙,谢谢!

下图描述了我不想在这个页面上发生的事情。

在此处输入图像描述

4

4 回答 4

7

在您的实施中实施以下内容

- (NSUInteger) supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskPortrait;

}

这应该会给你你正在寻找的结果!

于 2013-11-07T03:39:53.947 回答
6

使用此代码

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate
{

    return UIInterfaceOrientationMaskPortrait;

}

-(NSUInteger)supportedInterfaceOrientations
{

  return UIInterfaceOrientationMaskPortrait;

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{

 return UIInterfaceOrientationPortrait;

}

@end
于 2013-11-07T07:34:54.767 回答
0

我想我找到了一个不错的解决方案。好吧,就我而言,我在故事板中使用 UISplitViewController 作为 rootController,但想法是一样的。

  1. 子类你的rootController(在我的例子中是UISplitViewController)并捕获shouldAutorotate()回调,这样你就可以从那里调用子视图shouldAutorotate。
  2. 在要锁定旋转的视图中实现 shouldAutorotate()

    class MyUISplitViewController: UISplitViewController {
    override func shouldAutorotate() -> Bool {
        if ((self.viewControllers.last) != nil && (self.viewControllers.last!.topViewController) != nil){
            if (self.viewControllers.last!.topViewController!.respondsToSelector("shouldAutorotate"))
            {
                return self.viewControllers.last!.topViewController!.shouldAutorotate()
            }
        }
        return true
    }
    }
    

在你的子 UIViewController

override func shouldAutorotate() -> Bool {
        if (UIDevice.currentDevice().userInterfaceIdiom == .Phone)
        {
            return false
        }else{
            return true
        }
    }

如果你想检查支持的方向,你可以简单地使用supportedsupportedInterfaceOrientations()

编辑:

不要忘记在 Storyboard 根 viewController 中设置“MyUISplitViewController”类

于 2015-04-17T09:26:22.327 回答
0

问题是,正如您正确指出的那样,您的主页选项卡不是最顶层的视图控制器。

根据我对这个主题的有限知识,我只能想到以下几点:

  1. 创建另一个选项卡视图控制器并实现控制方向的方法,即shouldAutorotatesupportedInterfaceOrientations
  2. 在启动时将此控制器设为第一个;
  3. 使用 push segue 将其他选项卡向下路由到原始选项卡控制器(支持所有方向的控制器)。
于 2014-06-11T15:37:46.230 回答