17

在 iOS6 中,shouldAutorotateToInterfaceOrientation已弃用。我尝试使用 supportedInterfaceOrientations并使shouldAutorotate 应用程序正常工作以进行自动旋转,但失败了。

这个 ViewController 我不想旋转,但它不起作用。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

有任何想法吗?提前感谢您的帮助!

4

2 回答 2

38

弄清楚了。

1)子类UINavigationController(层次结构的顶部视图控制器将控制方向。)确实将其设置为self.window.rootViewController。

- (BOOL)shouldAutorotate
{
    return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return self.topViewController.supportedInterfaceOrientations;
}

2)如果你不想让视图控制器旋转

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

3)如果你希望它能够旋转

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

顺便说一句,根据您的需要,另一种相关方法:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
     return UIInterfaceOrientationMaskPortrait;
}
于 2012-09-30T15:29:10.370 回答
3

如果您使用标签栏控制器而不是导航控制器作为根控制器,则需要类似地继承 UITabBarController。

语法也会有所不同。我成功地使用了以下内容。然后,我在要覆盖的视图控制器上成功使用了上述示例。就我而言,我希望主屏幕不旋转,但我有一个带有电影的常见问题解答屏幕,我自然希望启用横向视图。工作完美!只需注意对 self.modalViewController 的语法更改(如果您尝试使用导航控制器的语法,您会收到编译器警告。)希望这会有所帮助!

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (BOOL)shouldAutorotate
{
    return self.modalViewController.shouldAutorotate;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return self.modalViewController.supportedInterfaceOrientations;
}
于 2012-10-03T00:50:13.703 回答