强制旋转UIViewController

时间:2012-07-06 17:23:57

标签: ios uinavigationcontroller rotation

所以,我已经放弃尝试解决我一直在控制旋转的问题而不调用我的shouldAutorotateToInterfaceOrientation:方法,因为几年来每个人都将其称为iOS错误

现在我需要强制旋转我的UIViewController。有没有办法可以做到这一点,因为现在已经删除了UIDevice实例方法,我不知道如何强制旋转我的控制器。

2 个答案:

答案 0 :(得分:7)

我不确定您所说的UIDevice方法已被删除,但以下内容对我有效(这确实使用了UIDevice orientation方法)。最重要的是,如果您的视图只接受横向视图,则可以使用以下命令强制iOS更改方向。这很奇怪,但它确实有效。我很抱歉我不能赞美原作者,但是曾经在StackOverflow上遇到过这个问题:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

- (void)forceLandscape
{
    // make sure shouldAutorotateToInterfaceOrientation is configured to accept only landscape

    if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
    {
        UIWindow *window = [[UIApplication sharedApplication] keyWindow];
        UIView *view = [window.subviews objectAtIndex:0];
        [view removeFromSuperview];
        [window addSubview:view];
    }
}

相当于强制肖像模式(当然,假设您的shouldAutorotateToInterfaceOrientation仅接受肖像):

- (void)forcePortrait
{
    // make sure shouldAutorotateToInterfaceOrientation is configured to accept only portrait

    if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation]))
    {
        UIWindow *window = [[UIApplication sharedApplication] keyWindow];
        UIView *view = [window.subviews objectAtIndex:0];
        [view removeFromSuperview];
        [window addSubview:view];
    }
}

答案 1 :(得分:0)

使用xcode7.3 ios9。 我一直试图强行观看景观视图超过一周,没有留下头发:(。对于其他任何人发现这个问题并且没有任何答案可行,或任何其他无数的强迫景观答案,我终于找到了在这里工作的东西: http://www.btday.com/how-to-force-view-controller-orientation-in-ios-8/

建议将操作放在viewDidAppear中,但它似乎也适用于viewWillAppear并且稍微不那么难看。

override func viewWillAppear(animated: Bool) {
    UIDevice.currentDevice().setValue(UIInterfaceOrientation.LandscapeLeft.rawValue, forKey: "orientation")
}

如果这是错误的/坏的,请说出来,只有一个月的mac一个月,所以我是一个完整的nuub!

另请注意我使用的是UITabBarController,无论你是将它放在标签栏控制器还是其中一个孩子身上似乎都不重要