当前位置: 首页 > 知识库问答 >
问题:

如何在iOS7中以编程方式设置设备方向?

段干德泽
2023-03-14

我正在使用AutoLayout开发iPad应用程序,如果用户启用某个模式(“平视”模式),我希望只支持纵向(或纵向倒置)方向,而且,如果设备处于横向,我希望自动切换到纵向模式。

在顶视图控制器中,我有以下内容:

- (NSUInteger) supportedInterfaceOrientations {
    if (self.modeHeadsUp) {
        return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
    } else {
        return UIInterfaceOrientationMaskAll;
    }
}

- (BOOL) shouldAutorotate {
    return TRUE;
}

根据我在这里其他地方看到的答案,答案似乎是我应该使用“application SetStatusBaroOrientation”。因此,在用户选择“抬头”模式的方法中,我包括:

    UIApplication *application = [UIApplication sharedApplication];
    [application setStatusBarOrientation:UIInterfaceOrientationPortrait
                                animated:YES];

然而,这似乎没有任何作用。虽然我可以实际移动设备,使其旋转为纵向,但它不会自动这样做。

事实上,当在横向模式下运行上述代码尝试以编程方式设置方向后,当我使用以下代码查询应用程序“statusBarOrience”时,横向保持在“4”:

UIApplication *application = [UIApplication sharedApplication];
int orientation = [application statusBarOrientation];
self.movesTextView.text = [NSString stringWithFormat:@"ORIENTATION %d", orientation];

似乎SetStatusBaroOrientation没有触发autolayout,所以我尝试在之后添加此代码,但没有任何效果:

    [super updateViewConstraints];
    [self.view updateConstraints];

我意识到Apple希望将设备方向留给用户。然而,我希望能够在不处于“平视”模式时支持横向模式。

我是不是错过了什么可以强制改变方向的东西?

共有3个答案

冯枫
2023-03-14

当条件发生变化时,您需要调用尝试RotationToDeviceOrience(UIViewController)以使系统调用您的支持的InterfaceOrientations

袁枫涟
2023-03-14

使用这个。方向问题的完美解决方案... ios7及更早版本

[[UIDevice currentDevice] setValue:
    [NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
        forKey:@"orientation"];
籍英叡
2023-03-14

对于iOS 7

目标C:

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];

Swift 3:

let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")

我在调用它-viewDidPresar:

 类似资料:
  • 服务器时间在单击按钮事件中自动设置为我的设备。

  • 问题内容: 我的问题很简单 如何以编程方式设置我的按钮layout_gravity? 我在互联网上找到了它,但它只是抛出了一个Nullpointer异常: 有什么办法吗? 问题答案: Java Kotlin 有关重力值以及如何设置重力,请检查“重力”。 基本上,您应该选择依赖于父项。可以是等等。

  • 问题内容: 这个问题类似于: jsf:在UI中绑定到inputtext的integer属性在提交时设置为零 但是我对解决方案并不完全满意。上下文是相同的:我有一个Web表单,需要一个Integer值。如果文本框为空,我希望我的Integer字段为“null”,但是EL Parser会自动将我的id字段设置为“ 0”。 我可以通过在本地Tomcat VM中设置JVM参数来解决此问题: -Dorg.a

  • 我在Android中以编程方式设置APN。当我运行代码时,我得到。如果我在清单中提到这个权限,我得到的错误就像这些权限只有SYSTEM APPS。你能帮我解决这个问题吗?参考链接

  • 在iOS 5中,我们可以通过编程方式更改设备方向,如下所示: 但是iOS6已弃用,我如何在iOS6中以编程方式更改设备方向?

  • 场景:我将默认设备方向设置为纵向。但是,我想允许横向模式的一些视图。 我的大多数视图不需要是横向的。但是有一些带有方向检测,允许以横向模式显示全尺寸线性图。 我希望我的应用程序在大多数情况下都以肖像为中心。 问:我如何在需要的时候冻结肖像,但在情况允许的情况下允许风景?