【问题标题】:Force UIViewController full screen and landscape强制 UIViewController 全屏和横向
【发布时间】:2014-03-06 22:39:21
【问题描述】:

如何强制我的一个视图控制器在 iOS 中全屏和横向显示?我的应用处于纵向模式,但我希望只有一个视图是横向和全屏。

我尝试了这个solution,其中包括使用以下方法实现 CustomUINavigationController 并在我想要旋转的视图控制器中添加 shouldAutorotate 方法:

//自定义UIAvigationController

-(NSUInteger)supportedInterfaceOrientations{

     return UIInterfaceOrientationMaskLandscapeRight;

   }
  - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
     return UIInterfaceOrientationLandscapeRight;
   }
 - (BOOL)shouldAutorotate{
      return YES;
   }

//UIViewController 我要自动旋转

    - (NSUInteger)supportedInterfaceOrientations
{
    return self.topViewController.supportedInterfaceOrientations;
}

我想我的问题与视图的 herachy 有关。如果我的 ViewController 是我的初始视图控制器但不是所有视图,它就可以工作。我有一个自定义菜单和一个占位符(视图),我在其中显示所有其他视图。我想成为横向和全屏的视图控制器来自占位符内部的视图,也许这是问题,但我现在不知道如何解决它。

【问题讨论】:

  • How to handle different orientations in iOS 6 的副本。请参阅我的答案,了解您所需要的项目示例。
  • @LeoNatan 它不工作。它在一个单独的项目中工作,但不适用于我的项目,我的观点是herachy。我收到警告:不鼓励在分离的视图控制器上呈现视图控制器。我有一个自定义菜单和一个占位符(视图),我可以在其中看到所有其他视图。我想成为横向和全屏的视图控制器来自占位符中的视图,也许这就是问题
  • 当您的视图控制器没有父视图控制器或呈现视图控制器时,会引发该警告。您应该记住将所有子视图控制器作为子视图控制器添加到呈现视图控制器。
  • 查看我的答案以获得更好的解决方案!
  • 问题与子视图控制器有关。将所有子视图控制器作为子视图添加到视图控制器后,它就可以工作了。谢谢@LeoNatan

标签: ios objective-c rotation fullscreen


【解决方案1】:

所以当一个viewController被调用present is self时,会调用以下方法:

 -(NSUInteger)supportedInterfaceOrientations{

     return UIInterfaceOrientationMaskLandscapeRight;

   }
  - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
     return UIInterfaceOrientationLandscapeRight;
   }
 - (BOOL)shouldAutorotate{
      return YES;
   }

如您所见,通过放置它们,我会强制 UIViewContoller 显示 LandscapeRight。

不重要! : 如果你使用 UINavigation 控制器,你需要创建一些“主”导航控制器子视图,并在那里调用这些方法。

希望这会有所帮助!

【讨论】:

  • 由于未捕获的异常“UIApplicationInvalidInterfaceOrientation”,我收到错误正在终止应用程序,原因:“支持的方向与应用程序没有共同的方向,并且 shouldAutorotate 正在返回 YES”。我猜是因为我不支持横向模式(我的视图不旋转),你知道我该如何解决吗?
  • 尝试点击你的应用,然后点击“General”,检查“Lanscape Left”和“Landscape Right”是否勾选。
  • 它不工作。我收到警告:不鼓励在分离的视图控制器上呈现视图控制器。我有一个自定义菜单和一个占位符(视图),我可以在其中看到所有其他视图。我想成为横向和全屏的视图控制器来自占位符中的视图,也许这就是问题所在。
【解决方案2】:

您可以使用我的LNWindowManager 在不同的窗口中以模态方式呈现视图控制器。

https://github.com/LeoNatan/LNWindowManager

它向模态视图控制器展示公开了一个类似的 API,但扩展到了窗口:

- (IBAction)displayButtonTapped:(UIButton *)sender
{
    UINavigationController* nvc = [self.storyboard instantiateViewControllerWithIdentifier:@"__presentationNVC"];
    nvc.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissWindow:)];

    UIWindow* window = [LNWindowManager templateWindowForName:@"example"];
    window.rootViewController = nvc;

    [[LNWindowManager sharedWindowManager].topWindow presentWindow:window animated:YES completion:nil];
}

- (void)dismissWindow:(UIBarButtonItem*)barButtonItem
{
    [[LNWindowManager sharedWindowManager].topWindow.presentingWindow dismissWindow:[LNWindowManager sharedWindowManager].topWindow animated:YES completion:nil];
}

然后您可以使用 AppDelegate 方法确定每个窗口的方向:

– application:supportedInterfaceOrientationsForWindow:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 2016-02-21
    • 2014-03-04
    • 1970-01-01
    • 2015-12-30
    • 2016-11-24
    • 2015-06-23
    相关资源
    最近更新 更多