iOS 9支持的接口定向不工作
我有一个带有以下代码的iOS 9支持的接口定向不工作,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我有一个带有以下代码的UIViewController: - (BOOL) shouldAutorotate { return NO; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationPortrait; } 我没有使用UINavigationController。当显示此UIViewController时,设备仍将旋转至横向。我的目标是iOS 9,这里有什么问题?所以问
UIViewController
:
- (BOOL) shouldAutorotate {
return NO;
}
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationPortrait;
}
我没有使用
UINavigationController
。当显示此UIViewController
时,设备仍将旋转至横向。我的目标是iOS 9,这里有什么问题?所以问题是我在info.plist
中定义了允许的方向,这显然覆盖了整个项目中其他任何地方的操作
为了纠正这个问题,我从
info.plist
中删除了条目,并在项目设置中定义了它们。现在一切正常。我尝试了许多解决方案,但正确的解决方案是:
ios 8和ios 9,无需编辑info.plist
- (BOOL) shouldAutorotate {
return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return (UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown);
}
UIInterfaceOrientationUnknown
无法确定设备的方向
UIInterfaceOrientationPortrait
设备处于纵向模式,设备保持直立,主页按钮位于底部
UIInterfaceOrientation上下方向图
设备处于纵向模式,但倒置,设备保持直立,主页按钮位于顶部
UIInterface方向和左视图
设备处于横向模式,设备保持直立,主页按钮位于左侧
UIInterfaceOrientationAndscapeRight
设备处于横向模式,设备保持直立,主页按钮位于右侧。我认为Bryan的回答不起作用,因为改变项目设置中的方向也会改变@mrhangz评论的
info.plist
如果问题仅限于iOS9,则可能是由于iPad中的iOS9新功能名为拆分视图
。iOS9默认情况下在特定iPad设备中启用拆分视图
,请参阅苹果文档
split view
强制应用程序在采用后支持所有视图中的所有方向。因此,如果您在info.plist
或目标常规设置中设置了所有方向支持,然后默认情况下支持split view
,这将忽略方向设置,尽管在viewController中支持界面方向,并支持所有方向
如文档所述,如果您在目标设置中选中了要求全屏
,则您的应用程序将不支持分割视图
。现在您可以再次控制代码中的方向。
在swift 5中 下面的代码将当前视图控制器锁定为纵向模式,但仍允许其他视图控制器转换为横向模式。我相信您必须在项目级别启用所有方向,然后使用此方法“关闭”,但不确定是否有办法将它们逐个“打开”
private var _orientations = UIInterfaceOrientationMask.portrait
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
get { return self._orientations }
set { self._orientations = .portrait }
}
关于这一切,可以在这里找到更全面的解释:
为简单起见,对于iPad,如果info.plist中受支持的界面方向(iPad)属性包括所有四个方向,且UIRequiresFullScreen属性值为否,iOS会将您的应用程序视为支持拆分视图。如果应用程序支持拆分视图功能,则不能禁用其旋转,至少可以通过上述方式禁用
我有一个详细的答案。您是否尝试在xcode项目设置上执行相同的操作?尝试在xcode中禁用lanscape左、右模式,只检查纵向模式,看看是否有效!!!我有其他UIViewController,我想允许旋转。只是不是这个特别的。我还确保这个UIViewController在我的故事板中被设置为正确的类。有人知道如何在swift3中做到这一点吗?谢谢!你救了我一天。作为记录,我在ios 9.0上有过这个bug,但它似乎在ios 9.1Bryan上得到了修复。我从info.plist文件中删除了这些条目,但我不明白在项目中定义它们是什么意思?我仍然让我所有的风投改变方向。即使我在VC中添加了一些方法来防止它(支持界面定向、shouldAutoRotate等)。我试图一次解决允许横向模式块的问题,并且需要防止需要大量重构的VCs采用横向模式。请注意,从info.plist中删除方向支持将导致上载错误(ITMS 90474)有关iOS9,请参见:当您删除
info.plist
中的方向时,它也会更改项目设置。@TicoBallagas这是一个令人费解的问题,因为正如您的链接所示,以及上述答案所述,设置“需要全屏”将修复上载时的所有错误。它不需要的,也是每个人都需要的,是调用方法。我已经在几个视图控制器中实现了shouldAutorotate
,但是没有一个被调用。XCode 8.2,iOS 10.2这对我很有用。我需要这个信息,我不知道。不适合我。我的视图控制器中有-(BOOL)shouldAutorotate
,但它从未被调用,我已选中“需要全屏”。据我所知,我一直在检查。使用Xcode 9并在iPhoneX上进行测试,我发现了同样的问题。覆盖似乎没有效果,关于plist mods和要求全屏显示的建议也不会影响我测试的结果。唯一影响结果的似乎是在应用程序范围内的设置中锁定旋转。想知道是否有人发现了获得这项工作的“秘密”,或者这仍然是个谜。您需要将UIInterfaceOrientationTask而不是UIInterfaceOrientation返回到支持的InterfaceOrientation(例如UIInterfaceOrientationMaskPortrait)