iOS 6 – (BOOL)应该没有调用导航控制器推送viewControllers的调用
对于我的应用程序, rootViewController
是navgationController
。
我发现推控制器了
-(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