我希望我的所有观看次数都处于纵向模式。这有效,除非我将UINavigationController
推到另一个上。在这种情况下,secondaryNavigationController
内的视图将遵循设备方向。以下是我如何调用UINavigationControllers
。
[secondaryNavigationController setNavigationBarHidden:YES];
[[appDelegate secondaryNavigationController navigationBar] setHidden:YES];
[mainNavigationController presentModalViewController:[appDelegate secondaryNavigationController] animated:YES];
我的所有观点都实现了这种方法,但似乎没有帮助。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
答案 0 :(得分:1)
小心:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
Since it has been deprecated on iOS 6.0。目前,UIViewControllers
或UINavigationControllers
内的UITabBarControllers
轮换存在一些问题。要解决这个问题,在你的情况下,你应该对UINagivationController
进行子类化或为它创建一个类别(尽管Apple比第一个更不鼓励第二个)。您可以使用this(这种情况适用于UITabBarController
,但您可以理解逻辑),以检查如何进行子分类。然后,您可以针对UIViewControllers
执行以下操作:
-(BOOL)shouldAutorotate
{
return YES;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
虽然您允许旋转(返回YES),但UIViewController
将始终为纵向。这里的逻辑是,如果你来自景观中的UIViewController
,如果你返回NO,那么你的UIViewController
将留在景观中。
答案 1 :(得分:0)
以下是对我有用的完整答案,基于iYaniv的评论和Jacky Boy的回答。
我选择了iYaniv的类别并将其作为UINavigationController
的子类而不是类别(这是你应该做的)。然后我用UINavigationController *
替换了myUINavigationController *
的所有实例。然后在我的所有UIViewControllers
中使用了Jacky Boy的片段。
/* myUINavigationController.h */
#import <UIKit/UIKit.h>
@interface myUINavigationController : UINavigationController
@end
和
/* myUINavigationController.m */
#import "myUINavigationController.h"
@interface myUINavigationController ()
@end
@implementation myUINavigationController
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end