3 回答
TA贡献1853条经验 获得超9个赞
在IOS6中,您在三个地方都支持界面方向:
.plist(或“目标摘要”屏幕)
您的UIApplicationDelegate
正在显示的UIViewController
如果遇到此错误,则很可能是因为您在UIPopover中加载的视图仅支持纵向模式。这可能是由Game Center,iAd或您自己的视图引起的。
如果是您自己的视图,则可以通过重写UIViewController上的supportedInterfaceOrientations来修复它:
- (NSUInteger) supportedInterfaceOrientations
{
//Because your app is only landscape, your view controller for the view in your
// popover needs to support only landscape
return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
如果不是您自己的视图(例如iPhone上的GameCenter),则需要确保.plist支持纵向模式。您还需要确保UIApplicationDelegate支持以纵向模式显示的视图。您可以通过编辑.plist,然后在UIApplicationDelegate上覆盖supportedInterfaceOrientation来做到这一点:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}
TA贡献1780条经验 获得超5个赞
在另一种情况下,可能会出现此错误消息。我花了好几个小时才找到问题。阅读几次后,此线程非常有帮助。
如果将主视图控制器旋转为横向,并且您调用一个应以纵向显示的自定义子视图控制器,则在代码如下所示时可能会发生此错误消息:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationPortrait;
}
这里的陷阱是xcode的intellisense建议“ UIInterfaceOrientationPortrait”,我对此并不在意。乍一看,这似乎是正确的。
右边的面具叫
UIInterfaceOrientationMaskPortrait
请注意小前缀“ Mask”,否则您的子视图将最终出现异常和上面提到的错误消息。
新的枚举进行了位移。旧的枚举返回无效值!
(在UIApplication.h中,您可以看到新的声明:UIInterfaceOrientationMaskPortrait =(1 << UIInterfaceOrientationPortrait))
解决方案是:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
// ATTENTION! Only return orientation MASK values
// return UIInterfaceOrientationPortrait;
return UIInterfaceOrientationMaskPortrait;
}
快速使用
override func shouldAutorotate() -> Bool {
return true
}
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}
- 3 回答
- 0 关注
- 1841 浏览
添加回答
举报