我正在尝试限制一个在UINavigationController之上的视图控制器。为此,我创建了一个UINavigationController子类并实现了2个方法
- (BOOL)shouldAutorotate {
return [[self.viewControllers lastObject] shouldAutorotate];}
- (NSUInteger)supportedInterfaceOrientations {
return [[self.viewControllers lastObject] supportedInterfaceOrientations];}
我想在UINavigationController(它是Root View Controller)之上的第一个viewcontroller应该处于纵向模式,而我从根视图控制器推送的下一个视图控制器应该是Landscape模式(仅限)。
所以我在两个视图控制器中都覆盖了这两种方法。 在根视图控制器
中- (BOOL)shouldAutorotate {
return NO;}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;}
在下一个视图控制器中
- (BOOL)shouldAutorotate {
return YES;}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;}
它的工作正常但不完全。这是我第一次推动视图控制器以纵向模式显示(不限制为我预期的横向),并且一旦我旋转设备/模拟器并且其工作正常并且仅限于横向。
有人可以提供帮助吗?
答案 0 :(得分:1)
试试这个。
在viewWillAppear
中调用此方法将明确告诉设备跳转到纵向。
[[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationPortrait];
我不认为这是正确的解决方案。但如果你没有其他选择,你可以使用它。 快乐编码:)
答案 1 :(得分:0)
U present
new
controller
:
SecondViewController *objSecondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController presentViewController:objSecondViewController animated:NO completion:^{}];
new
controller
:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationLandscapeLeft;
}
答案 2 :(得分:-1)
这对我有用。试试这个:
1) YourApp-Info.plist
请参阅以下屏幕截图:
2) Project Target
请参阅以下屏幕截图:
答案 3 :(得分:-2)
UIViewController
具有以下功能。您可以在想要重定向纵向的视图控制器中实现此功能。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
if(interfaceOrientation == UIInterfaceOrientationPortrait)
return YES;
else
return NO;
}