iphone - 以编程方式将设备方向更改为横向不起作用

标签 iphone objective-c ios ipad

因此,我试图通过执行以下操作来强制更改部分代码的设备方向:

if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait ||
        [[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown){
        [[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:NO];
    }

但是方向没有改变。为什么是这样?基本上当前方向是纵向的,我希望它被迫处于横向

最佳答案

如果 Inder Kumar Rathore 的建议有效,那就太好了。但是文档将方向属性描述为只读的,所以如果它有效,我不确定你是否可以依赖它在 future 工作(除非 Apple 做了聪明的事情并改变了这一点;强制改变方向,不管如何用户当前正在拿着他们的设备,这是一个明显的功能需求)。

作为替代方案,在 viewDidLoad 中插入的以下代码将成功(并且有点奇怪地)强制定向(假设您已经按照 roronoa zorro 推荐的方式修改了 shouldAutorotateToInterfaceOrientation):

if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation]))
{
    UIWindow *window = [[UIApplication sharedApplication] keyWindow];
    UIView *view = [window.subviews objectAtIndex:0];
    [view removeFromSuperview];
    [window addSubview:view];
}

显然,如果用户当前以纵向模式持有他们的设备(因此推测您的 shouldAutorotateToInterfaceOrientation 仅设置为横向,并且如果用户以纵向模式持有他们的设备,则此例程将其转换为横向)。如果您的 shouldAutorotateToInterfaceOirentation 仅设置为纵向,您只需将 UIDeviceOrientationIsPortrait 与 UIDeviceOrientationIsLandscape 交换。

出于某种原因,从主窗口中删除 View 然后重新添加它会强制它查询 shouldAutorotateToInterfaceOrientation 并正确设置方向。鉴于这不是 Apple 认可的方法,也许人们应该避免使用它,但它对我有用。你的旅费可能会改变。但是这个SO discussion也指其他技术。

关于iphone - 以编程方式将设备方向更改为横向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670834/

相关文章:

ios - 转换到新的 View Controller 时如何更新状态栏样式?

ios - 在 iOS 7 中检测静音模式

iphone - 为什么这段代码会给我一个关于弱属性的错误?

ios - 如果更改基线偏移属性,UILabel 属性文本不能有多行

ios - Objective-C:如何从 NSDate 获取日期和日期?

objective-c - 如何使标题注释在 Xcode 中保持最新

objective-c - 如何向字符串添加度数符号?

ios - 如何在 AsyncDisplayKit 中为 AsTableNode 创建框架?

ios - 当导航 Controller [SWIFT 3] 将 tableview 设为 root 时,它在 ViewController 中似乎为 nil

iphone - 方法返回 0 而不是我分配给变量的数字