【问题标题】:I want to restrict some of the view controller to landscape in ios6我想在 ios6 中将一些视图控制器限制为横向
【发布时间】:2012-11-06 18:08:40
【问题描述】:

我试图限制一个位于 UINavigationController 之上的视图控制器。为此,我创建了一个 UINavigationController 子类并实现了 2 个方法

- (BOOL)shouldAutorotate {
return [[self.viewControllers lastObject] shouldAutorotate];}

- (NSUInteger)supportedInterfaceOrientations {
return [[self.viewControllers lastObject] supportedInterfaceOrientations];}

我希望 UINavigationController(它是根视图控制器)顶部的第一个视图控制器应该处于纵向模式,而我从根视图控制器推送的下一个视图控制器应该是横向模式(仅)。

所以我在两个视图控制器中都覆盖了这两种方法。 在根视图控制器中

- (BOOL)shouldAutorotate {
return NO;}

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;}

在下一个视图控制器中

- (BOOL)shouldAutorotate {
return YES;}

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;}

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

有人可以帮忙吗?

【问题讨论】:

    标签: iphone ios6


    【解决方案1】:

    试试这个。

    viewWillAppear 中调用这个会明确告诉设备跳转到纵向。

    [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)UIInterfaceOrientationPortrait];
    

    我认为这不是正确的解决方案。但如果你没有其他选择,你可以使用它。 快乐编码:)

    【讨论】:

    • 谢谢哥们,我花了一天多的时间才做到这一点。
    【解决方案2】:

    presentnewcontroller

    SecondViewController *objSecondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
    [self.navigationController presentViewController:objSecondViewController animated:NO completion:^{}];
    

    newcontroller

    - (BOOL)shouldAutorotate {
      return YES;
    }
    - (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
    }
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
      return UIInterfaceOrientationLandscapeLeft;
    }
    

    【讨论】:

      【解决方案3】:

      这对我有用。试试这个:

      1) YourApp-Info.plist

      • 为支持的界面方向再添加一个数组
      • 将您所需的方向添加到此词典中

      参考下面的截图:

      2) Project Target

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

      参考下面的截图:

      【讨论】:

      • 这将如何限制特定的控制器?
      【解决方案4】:

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

        - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
              // Return YES for supported orientations
      
          if(interfaceOrientation == UIInterfaceOrientationPortrait)
              return YES;
          else
              return NO;
      
          }
      

      【讨论】:

      • 感谢您的快速回复 Suresh,但在 ios6 中该方法不会调用。这就是我们使用其他两种方法的原因。
      猜你喜欢
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2016-08-07
      相关资源
      最近更新 更多