我有一个由许多视图控制器组成的应用程序......在项目摘要中,我已将纵向方向设置为唯一支持的设备方向。
但是,当横向转动时,该应用程序仍然会变得混乱。
我的问题是,有没有办法通过应用程序委托或其他方式全局禁用自动旋转?
还是我必须进入我所有的视图控制器并添加“shouldAutorotateToInterfaceOrientation”方法?
只是不想错过将它添加到一个或什么...
谢谢!
在 Info.plist 中展开“支持的界面方向”并删除横向项目,使您的应用程序仅在纵向模式下运行。
现在有三种设备方向键info.plist
。
第三个是我认为用于非通用应用程序的,其余两个是用于 iPad 和 iPhone 的。
你应该试一试。
在努力设置 UIViewController 的 shouldAutorotate
和supportedInterfaceOrientation
方法之后,在 iOS6 中没有成功,我发现最有效的方法是在应用程序委托中设置它。
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return UIInterfaceOrientationMaskPortrait;
}
但是返回使UIInterfaceOrientationMaskPortraitUpsideDown
我的应用程序崩溃。我不知道我做错了什么!
在根视图控制器的方法中:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
设置“返回否”;
这应该适用于所有视图。
如果您支持 iPad,那么您不应该取消选中横向,因为它会阻止您的应用在 App Store 上被 Apple 接受。
为了防止在应用程序显示您的第一个屏幕之前旋转,请将其放入您的 AppDelegate.m
此方法在以上 iOS 7.1 中有效并经过测试。
// G - fix for ipad.
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return UIInterfaceOrientationMaskPortrait;
}
从 IOS 6 开始,Haris Hussain 的回答现在似乎已被弃用,但有一些新方法可用于限制/启用轮换。
以下是 UIViewController 标头中列出的方法:
// New Autorotation support.
- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);
- (UIInterfaceOrientationMask)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);
// Returns interface orientation masks.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0);
请注意,如果您在已经旋转的状态下启动应用程序,shouldAutoRotate 似乎不起作用!
斯威夫特
iOS 6+
shouldAutorotate
推荐的方法是在每个附加的视图控制器中覆盖。如果您在根视图控制器中覆盖此属性,则所有“附加”视图控制器也将继承该行为。然而,呈现的视图控制器可能会变得“未附加”到根,因此不会继承覆盖,因此您需要单独覆盖这些视图控制器中的属性。
class RootViewController: UIViewController {
override var shouldAutorotate: Bool { false }
}
class PresentedViewController: UIViewController {
override var shouldAutorotate: Bool { false }
}
但是,如果您只是子类UIViewController
化并且仅在项目中使用子类化视图控制器,那么您将拥有真正的全局修复(使用代码)。
class NonrotatableViewController: UIViewController {
override var shouldAutorotate: Bool { false }
}
设置替代(无代码)
也许最全局的修复是在目标设置的信息选项卡中编辑 Info.plist 文件。有一个supported-interface-orientations 键,每个值代表一个支持的方向。删除除纵向之外的所有视图控制器将禁用所有视图控制器中的旋转,无论是否附加到根。