3

我有一个应用程序,它通常是一个纵向应用程序,并且只显示一个 UIViewController 的横向视图。在新的 iOS 6 发布之前它工作正常。

我真的不明白方向在 iOS 6 中是如何工作的。所以我写了一个测试应用程序。这是我所做的:

  • 设置应用程序的方向以支持所有方向。

在此处输入图像描述

  • 我正在使用故事板。rootViewController 嵌入在纵向的 UINavigationController 中。

在此处输入图像描述

  • rootViewController 中的代码:

    -(NSUInteger)支持的接口方向

    {

    返回 UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;

}

  • 当我单击打开栏按钮时,我将推动另一个应该处于横向模式的 (SecondViewController) 视图控制器:

    -(NSUInteger)supportedInterfaceOrientations { 返回 UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight; }

尽管此方法被正确调用,但第二个视图控制器始终也处于纵向模式。

有人可以给我一些建议吗?谢谢

4

3 回答 3

1

这是我的解决方案:

在第二个视图控制器的 viewDidLoad 中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIViewController *viewController = [[UIViewController alloc] init];
    [self presentViewController:viewController animated:NO completion:^{
        [viewController dismissViewControllerAnimated:NO completion:nil];
    }];
}

这将迫使第二个视图旋转到横向,从而解决了我的问题。它适用于 iOS 5 和 6。

于 2012-10-10T05:49:16.733 回答
1

对于 iOS-6,我已经这样做了。它运行良好

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft;}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeLeft;}

在第二个视图

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return YES;}
于 2012-12-21T05:25:48.937 回答
0

我认为最好的解决方案是坚持苹果官方文档。因此,据我所知,我使用以下方法,并且在 iOS 5 和 6 上一切都运行良好。在您的所有 ViewControllers 中覆盖以下方法。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

iOS 6 的方法,第一个方法返回支持的方向掩码(如其名称所示),您可以将其更改为横向或最适合您的套件。

-(NSInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskPortrait; //UIInterfaceOrientationMaskPortrait or LandscapeLeft ... 
}

第二个就是告诉您的 VC,当 VC 将要显示时,哪个是首选界面方向。

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait; //tells your VC in which orientation it should be presented, if you set Porttrait it would be in Portrait or otherwise ...
}

这个解决方案运行顺利,我不喜欢创建宏和其他东西的想法,围绕这个简单的解决方案。希望这有助于...

于 2012-11-28T07:40:15.040 回答