的iOS 6 - (BOOL)shouldAutorotate不获取调用导航控制器推viewCon

2019-08-01 07:50发布

对于我的应用程序rootViewControllernavgationController

我发现,推控制器

-(BOOL)shouldAutorotate是没有得到调用。

-(NSUInteger)supportedInterfaceOrientations被调用一次。

我在核对无误xcode's项目总结(或plist )的Windows所有方向的支持。

我想要得到这些所谓的方法,因为是我想要的方向改变编程执行一些uicontrol定位代码。

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

-(BOOL)shouldAutorotate;

-(NSUInteger)supportedInterfaceOrientations;

我检查该控制器被越来越推,并相应地称为相应推控制器的uicontrol定位代码在导航控制器的以下方法

(NSUInteger)supportedInterfaceOrientations;

这是工作的罚款,但我不认为这是正确的做法。 请帮我出了更好的解决方案。

Answer 1:

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

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

另一种方法,你可以通过创建UINaviagationController的类别做

为.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


Answer 2:

我也面临着导航控制器相同的问题。 它可以在所有的推视图控制器的情况很好,但我的情况是完全不同的我有一个视图控制器作为根推到导航控制器(ViewControllerParent)

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

由于一些项目的要求,我保持ViewControllerParent作为基础,然后我添加子视图控制器的视图子视图基于用户行为的父母。 现在,我已经在那里我想Child1不旋转,CHILD2有转动的情况。

我面临的问题是,我的[self.topViewController]在导航控制器类总是返回我的父对象,因为我不是推童车到导航堆栈。 所以在我的童车我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



Answer 3:

您可以检查通过接口方向

[UIApplication sharedApplication].statusBarOrientation

被加载视图控制器时,就是说,在viewWillAppear 。 在那里,你可以做你的子视图的布局。 当视图是向上, shouldAutorotate每当设备接通将被调用。



Answer 4:

重写UINavigationController的是正确的做法,但我不知道,如果你正在检查的推控制器supportedInterfaceOrientations的正确方法。

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



Answer 5:

我遇到过同样的问题。 检查这回答了一个伟大的approauch而不是应用ShouldAutoRotate



文章来源: iOS 6 - (BOOL)shouldAutorotate not getting called for navigation controllers pushed viewControllers