2

因此,我已经放弃尝试解决我一直遇到的一个问题,即我的控制器将在不调用我的shouldAutorotateToInterfaceOrientation:方法的情况下旋转,因为几年来每个人都将其称为 iOS 错误。

现在我只需要强制旋转我的UIViewController. 有没有办法可以做到这一点,因为UIDevice实例方法现在已被删除,我不知道该怎么做才能强制旋转我的控制器。

4

2 回答 2

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];
    }
}
于 2012-07-06T20:04:08.483 回答
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 ,无论您将它放在标签栏控制器还是它的一个孩子中,这似乎都无关紧要

于 2016-04-09T16:05:04.450 回答