我面临着一个仅限横向应用的奇怪问题。它可以向左或向右旋转,但是当应用程序启动时,它会旋转180度而不是以正确的方向启动。
我做了我能在StackOverflow和Google上找到的所有内容。信息plist包含:
经过测试:iOS 7.1完全忽略了plist中的初始启动方向设置。我尝试了左右两种,然后删除了来自info plist的密钥。没有效果。应用程序始终使用左侧的主页按钮启动横向,忽略此设置。
重试时,我删除了应用并清理了构建。
在App Delegate中,我有这个:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
- (BOOL)shouldAutorotate {
return YES;
}
在根视图控制器中:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
- (BOOL)shouldAutorotate {
return YES;
}
像Tiny Wings这样的一些风景应用程序以正确的方向启动,所以我知道我的项目有问题。让这个工作的秘诀是什么?
答案 0 :(得分:4)
首先,您不需要AppDelegate
中的三种方法,因为它们仅适用于控制器,并且无论如何都不会被调用。
您可以实施application:supportedInterfaceOrientationsForWindow:
(iOS 6+),但它表示Info.plist
中的正确密钥不需要{<1}}:
<强>讨论强>
此方法返回支持的界面方向的总集 通过应用程序。确定是否旋转特定视图时 控制器,此方法返回的方向相交 具有由根视图控制器或最顶层支持的方向 呈现视图控制器。应用和视图控制器必须同意 在允许轮换之前。
如果您没有实现此方法,应用程序将使用中的值 应用程序的Info.plist的UIInterfaceOrientation键作为默认值 界面方向。
但如果您的问题出现在iOS 6+上,我会尝试一下,因为它可能是Apple的错误。
此外,您可以在控制器方法中返回所有方向以保持简单。
总之:
AppDelegate
发布的方法,不会被调用。Info.plist
(任何iOS版本)控制您的首选方向。可选,如果问题仍然存在:
application:supportedInterfaceOrientationsForWindow:
(仅限iOS 6+)中实施AppDelegate
,这通常不需要。答案 1 :(得分:3)
iOS始终将应用程序启动到相同的界面方向(我相信应用程序宣布的第一个应用程序)然后在启动后旋转。这是预期的行为,因为它简化了开发的某些方面。
但是,我相信这个问题的答案是您正在寻找的解决方案: iOS: Initial interface orientation[UIInterfaceOrientation] being ignored in plist
答案 2 :(得分:1)
到目前为止,我得到了你的问题,这可能会帮到你。您可以在一般设置中在设备方向上简单地勾选横向(右/左)模式。
无需改变plist或任何东西。这对我有用,因为我创建了一个横向模式的游戏,所以它只是在横向模式下打开而没有旋转效果。
答案 3 :(得分:0)
您需要更改Supported interface orientations
和Supported interface orientations (iPad)
的值顺序。因此,Landscape (right home button)
应该先行,Landscape (left home button)
应该在这些列表中排在第二位。
此外,您可以安全地从Initial interface orientation
删除.plist
。这三种方法与AppDelegate
和RootViewController
中的界面方向处理有关。