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

adi*_*dit 1 iphone objective-c ipad ios

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

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

但方向并没有改变.为什么是这样?基本上目前的方向是肖像,我希望它被迫在景观中

Rob*_*Rob 5

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

作为替代方案,在viewDidLoad中插入的以下代码将成功(并且有点奇怪)强制方向(假设您已经修改了你应该将rutoronate zorro推荐为autorotateToInterfaceOrientation):

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

很明显,如果用户当前正在以纵向方向握住他们的设备(这可能是你的设备只能设置为仅景观,并且如果用户以纵向模式持有他们的设备,则此例程将其转换为横向),这样做就是这样做.如果您的shouldAutorotateToInterfaceOirentation仅设置为纵向,则只需将UIDeviceOrientationIsPortrait与UIDeviceOrientationIsLandscape交换即可.

出于某种原因,从主窗口中删除视图然后重新添加它会强制它查询shouldAutorotateToInterfaceOrientation并正确设置方向.鉴于这不是Apple批准的方法,也许人们应该避免使用它,但它适用于我.你的旅费可能会改变.但是这个SO讨论也涉及其他技术.