所以我想通过执行以下操作来强行更改代码的一部分设备方向:
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait ||
[[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortraitUpsideDown){
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:NO];
}
然而,方向没有改变。为什么是这样?基本上目前的方向是肖像,我希望它被迫在风景中
答案 0 :(得分: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];
}
显然,如果用户当前正在以纵向方向握住他们的设备(这可能是因为你的应该只为风景设置了shouldAutorotateToInterfaceOrientation,并且如果用户将他们的设备保持在纵向模式,则该例程将其转换为横向)。如果你的shouldAutorotateToInterfaceOirentation设置为仅限肖像,你只需将UIDeviceOrientationIsPortrait与UIDeviceOrientationIsLandscape交换。
出于某种原因,从主窗口中删除视图然后重新添加它会强制它查询shouldAutorotateToInterfaceOrientation并正确设置方向。鉴于这不是Apple批准的方法,也许人们应该避免使用它,但它适用于我。你的旅费可能会改变。但是这个SO discussion也指其他技术。
答案 1 :(得分:4)
在iOS7上完美运作
如果你想要Potrait那么:
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
forKey:@"orientation"];
如果你想要风景:
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationLandscapeRight]
forKey:@"orientation"];
答案 2 :(得分:2)
如果它处于横向状态,你就无法强制你的设备进入纵向模式,反之亦然。你所能做的就是告诉你的应用程序处于横向或纵向的特定模式。你可以通过以下方式实现: - < / p>
您应该实施shouldAutorotateToInterfaceOrientation
:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
编辑pList。
在您的plist中添加一个键UIInterfaceOrientation
,并根据您的需要将其属性更改为UIInterfaceOrientationLandscapeLeft
,UIInterfaceOrientationLandscapeRight
,UIInterfaceOrientationPortraitUpsideDown
。
答案 3 :(得分:1)
这可能不适用于iOS 7,但它在以前的iOS版本中有效,所以现在对这个答案的贬低是没有意义的。问题是在2年前被问到的,当时我回答了这个问题,然后这是一个有效的解决方案。
[[UIDevice currentDevice] setOrientation: UIDeviceOrientationLandscapeLeft];