我想在ios6中将一些视图控制器限制为横向

时间:2012-11-06 09:33:01

标签: iphone ios6

我正在尝试限制一个在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;}

它的工作正常但不完全。这是我第一次推动视图控制器以纵向模式显示(不限制为我预期的横向),并且一旦我旋转设备/模拟器并且其工作正常并且仅限于横向。

有人可以提供帮助吗?

4 个答案:

答案 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

  • 为支持的界面方向添加一个阵列
  • 将此要求的方向添加到此词典

请参阅以下屏幕截图:

enter image description here

2) Project Target

  • 从支持的界面方向
  • 中选择所需的方向

请参阅以下屏幕截图:

enter image description here

答案 3 :(得分:-2)

UIViewController具有以下功能。您可以在想要重定向纵向的视图控制器中实现此功能。

  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        // Return YES for supported orientations

    if(interfaceOrientation == UIInterfaceOrientationPortrait)
        return YES;
    else
        return NO;

    }