7

对于我的应用程序rootViewControllernavgationController.

我发现推控制器的

-(BOOL)shouldAutorotate没有被调用。

-(NSUInteger)supportedInterfaceOrientations只被调用一次。

我已在xcode's项目摘要(或plist)中正确检查了 Windows 所有方向支持。

我希望调用这些方法,因为我想以编程方式执行一些 uicontrol 定位代码以更改方向。

我通过覆盖(类别)导航控制器的以下方法解决了这个问题

-(BOOL)shouldAutorotate;

-(NSUInteger)supportedInterfaceOrientations;

我检查了哪个控制器被推送,并相应地在导航控制器的以下方法中调用了相应的推送控制器的 uicontrol 定位代码

(NSUInteger)supportedInterfaceOrientations;

这工作正常,但我认为这不是正确的方法。请帮助我寻求更好的解决方案。

4

5 回答 5

27

您可以查看以下链接,您需要创建自定义导航以支持自动旋转

http://mobileappdevpage.blogspot.in/2012/11/how-to-use-should-autorotateios-6-with.html

另一种方法是创建 UIViagationController 类别

.h 文件的代码是

@interface UINavigationController (autorotation)

-(BOOL)shouldAutorotate;
-(NSUInteger)supportedInterfaceOrientations;

.m 文件的代码是

@implementation UINavigationController (autorotation)

-(BOOL)shouldAutorotate
{

    UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
    [self.topViewController shouldAutorotate];
    return YES;

}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;

}
@end
于 2012-11-29T05:43:37.383 回答
1

我在导航控制器上也遇到了同样的问题。它适用于所有推送的视图控制器,但我的情况完全不同,我将一个视图控制器作为根推送到导航控制器(ViewControllerParent),

NavController
            -- rootViewController (ViewControllerParent)
                                          --- ViewControllerChild1
                                          --- ViewControllerChild2

由于某些项目要求,我将 ViewControllerParent 作为基础,然后根据用户操作将子视图控制器的视图作为子视图添加到父视图。现在我有一个场景,我希望 Child1 不旋转,而 Child2 旋转。

我面临的问题是导航控制器类中的 [self.topViewController] 总是返回父对象,因为我没有将孩子推入导航堆栈。所以我的 Childs 中的 shouldAutorotate 方法永远不会被调用。所以我不得不在我父母的 shouldAutorotate 方法中进行类检查,然后返回旋转值。我在父类(ViewControllerParent)中做了类似的事情,这是一种解决方法,但它解决了这个问题

-(BOOL)shouldAutorotate
{
  BOOL allowRotation = YES;

   if ([currentlyLoadedChild isKindOfClass:[Child1 class]])
   {
       allowRotation = NO;
   }
   if ([currentlyLoadedChild isKindOfClass:[Child2 class]])
   {
       allowRotation = YES;
   }
   return allowRotation;
} 

-anoop

于 2013-01-24T15:00:02.947 回答
0

您可以通过以下方式检查界面方向

[UIApplication sharedApplication].statusBarOrientation

当视图控制器被加载时,比如说,在viewWillAppear. 在那里你可以做你的子视图布局。一旦视图打开,shouldAutorotate就会在设备转动时调用。

于 2012-10-10T20:35:05.373 回答
0

覆盖 UINavigationController 是正确的方法,但我不确定您是否以正确的方式检查推送控制器 supportInterfaceOrientations。

看看我的答案:https ://stackoverflow.com/a/12669343/253008

于 2012-10-10T20:36:30.177 回答
0

我遇到过同样的问题。检查这个答案 ,它是一个很好的方法,而不是应用 ShouldAutoRotate

于 2015-12-03T05:32:51.943 回答