【问题标题】:ViewController with locked orientation锁定方向的 ViewController
【发布时间】:2015-10-26 13:55:15
【问题描述】:

我遇到以下情况:

ViewController A 应该锁定在横向(左侧或右侧)。 VC A 的设置如下:

-(UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscape;
}

-(BOOL)shouldAutorotate {
    return NO;
}

ViewController B 应该锁定在纵向上。它的设置如下:

-(UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate {
    return NO;
}

没有导航控制器或标签栏。它只是一个普通的视图控制器,然后按下按钮我从 ViewController A 转到 ViewController B

[self performSegueWithIdentifier:@"ViewControllerB" sender:self];

到目前为止一切都很好。但是当我关闭 ViewController B 时,ViewController A 会出现在纵向上。这就是我解雇 VC B 的方式:

[self dismissViewControllerAnimated:YES completion:nil];

另一个问题是:当我在 ViewController B 上并且在纵向上没问题时,然后我开始快速将我的设备从纵向旋转到横向几次,并且尽管有上述方向规则,但它在某个点旋转到横向。有什么我遗漏的吗?

【问题讨论】:

    标签: ios objective-c uiviewcontroller orientation-changes


    【解决方案1】:

    viewDidAppear: 尝试使用此方法旋转到您想要的方向,以防控制器负载时方向错误:

    NSNumber *value = @(UIInterfaceOrientationLandscapeRight); // Or whatever else orientation you need.
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
    

    还像这样重新定义您的 shouldAutorotate 方法:

    - (BOOL)shouldAutorotate {
        // Change the YES or NO order depending on your viewController.
        return [UIDevice currentDevice].orientation == UIDeviceOrientationPortrait ? YES : NO;
    }
    

    并且也实现这个方法:

    - (NSUInteger)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskPortrait; // Or whatever orientation you need in this viewController.
    }
    

    【讨论】:

    • 感谢您的回复。起初它似乎工作 - 当我去 B 然后返回 A 时,它确实在 A 上强制执行横向。但是,我第二次这样做时问题再次发生 - A 在纵向上出现错误。这似乎是一种模式,一次有效,下一次无效。我确定有解释,但我找不到。
    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多