iOS 6 – (BOOL)应该没有调用导航控制器推送viewControllers的调用

对于我的应用程序, rootViewControllernavgationController

我发现推控制器了

-(BOOL)shouldAutorotate没有被调用。

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

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

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

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

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

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

 (NSUInteger)supportedInterfaceOrientations; 

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

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

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 

我也遇到了与导航控制器相同的问题。 它在所有推送的视图控制器的情况下工作正常,但我的情况完全不同我有一个viewcontroller作为根推入导航控制器(ViewControllerParent),

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

由于一些项目要求,我将ViewControllerParent保持为基础,然后我根据用户操作将Child viewcontroller的视图添加为父视图。 现在我有一个场景,我希望Child1不要旋转,Child2要旋转。

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

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

-anoop

您可以通过检查界面方向

 [UIApplication sharedApplication].statusBarOrientation 

在视图控制器加载时,例如,在viewWillAppear 。 在那里,您可以进行子视图的布局。 视图启动后,只要设备转动,就会调用shouldAutorotate

重写UINavigationController是正确的方法,但我不确定你是否正确检查push控制器supportedInterfaceOrientations。

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

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