我有一个由很多视图控制器组成的应用程序.在项目摘要中,我将Portrait方向设置为唯一支持的设备方向。然而,该应用程序仍然得到混乱时,侧身。我的问题是,有没有一种方法可以通过应用程序委托或其他方式全局禁用自动旋转?或者我必须进入我所有的视图控制器并添加“shouldAutorotateToInterfaceOrientation”方法?只是不想错过把它加到一个或什么东西上...谢谢你,谢谢
uxhixvfz1#
在Info.plist中展开“Supported interface orientations”并删除Landscape项,使应用程序仅在纵向模式下运行。
xmq68pz92#
现在info.plist中有三种设备方向键。1.支持的界面方向(iPad)1.支持的界面方向(iPhone)1.支持的界面方向第三个是我认为非通用应用程序,其余两个是iPad和iPhone。你应该给予他们一个尝试。
info.plist
zy1mlcev3#
在努力设置UIViewController的shouldAutorotate和supportedInterfaceOrientation方法后,在iOS6中没有成功,我发现最有效的是在应用程序委托中设置它。
shouldAutorotate
supportedInterfaceOrientation
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskPortrait; }
然而,返回UIInterfaceOrientationMaskPortraitUpsideDown是崩溃我的应用程序。我不知道我做错了什么!
UIInterfaceOrientationMaskPortraitUpsideDown
t0ybt7op4#
在根视图控制器的方法中:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); }
设置'return NO';这应该对所有视图都适用。
n53p2ov05#
如果你支持iPad,那么你不应该取消选中横向方向,因为它会阻止你的应用程序被苹果在App Store上接受。为了防止在应用程序显示第一个屏幕之前旋转,请将此文件放在AppDelegate中。这个方法在iOS 7.1上面的工作和测试。
// G - fix for ipad. - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskPortrait; }
kwvwclae6#
Haris Hussain的答案现在似乎已经被弃用了,从iOS 6开始,但是有新的方法可以限制/启用旋转。下面是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似乎不起作用!
bq9c1y667#
SwiftiOS 6+
推荐的方法是在每个连接的视图控制器中覆盖shouldAutorotate。如果你在根视图控制器中覆盖这个属性,那么所有“附加”的视图控制器也将继承这个行为。然而,呈现的视图控制器可以“脱离”根,因此不会继承覆盖,因此您需要分别覆盖这些视图控制器中的属性。
class RootViewController: UIViewController { override var shouldAutorotate: Bool { false } } class PresentedViewController: UIViewController { override var shouldAutorotate: Bool { false } }
然而,如果你只是子类化UIViewController,并且在你的项目中只使用子类化的视图控制器,那么你就有了一个真正的全局修复(使用代码)。
UIViewController
class NonrotatableViewController: UIViewController { override var shouldAutorotate: Bool { false } }
设置替代(无代码)
也许最全局性的修复是在目标设置的info选项卡中编辑Info.plist文件。这里有一个“界面方向”键,每个值代表一个支持的方向。删除除肖像以外的所有视图控制器将禁用所有视图控制器中的旋转,无论是否附加到根。
jexiocij8#
项目导航器>“您的项目”>“常规”>“部署信息”>设备方向只检查你想要的,不检查你不想要的。
8条答案
按热度按时间uxhixvfz1#
在Info.plist中展开“Supported interface orientations”并删除Landscape项,使应用程序仅在纵向模式下运行。
xmq68pz92#
现在
info.plist
中有三种设备方向键。1.支持的界面方向(iPad)
1.支持的界面方向(iPhone)
1.支持的界面方向
第三个是我认为非通用应用程序,其余两个是iPad和iPhone。
你应该给予他们一个尝试。
zy1mlcev3#
在努力设置UIViewController的
shouldAutorotate
和supportedInterfaceOrientation
方法后,在iOS6中没有成功,我发现最有效的是在应用程序委托中设置它。然而,返回
UIInterfaceOrientationMaskPortraitUpsideDown
是崩溃我的应用程序。我不知道我做错了什么!t0ybt7op4#
在根视图控制器的方法中:
设置'return NO';
这应该对所有视图都适用。
n53p2ov05#
如果你支持iPad,那么你不应该取消选中横向方向,因为它会阻止你的应用程序被苹果在App Store上接受。
为了防止在应用程序显示第一个屏幕之前旋转,请将此文件放在AppDelegate中。
这个方法在iOS 7.1上面的工作和测试。
kwvwclae6#
Haris Hussain的答案现在似乎已经被弃用了,从iOS 6开始,但是有新的方法可以限制/启用旋转。
下面是UIViewController头中列出的方法:
请注意,如果您在已旋转的状态下启动应用,shouldAutoRotate似乎不起作用!
bq9c1y667#
Swift
iOS 6+
推荐的方法是在每个连接的视图控制器中覆盖
shouldAutorotate
。如果你在根视图控制器中覆盖这个属性,那么所有“附加”的视图控制器也将继承这个行为。然而,呈现的视图控制器可以“脱离”根,因此不会继承覆盖,因此您需要分别覆盖这些视图控制器中的属性。然而,如果你只是子类化
UIViewController
,并且在你的项目中只使用子类化的视图控制器,那么你就有了一个真正的全局修复(使用代码)。设置替代(无代码)
也许最全局性的修复是在目标设置的info选项卡中编辑Info.plist文件。这里有一个“界面方向”键,每个值代表一个支持的方向。删除除肖像以外的所有视图控制器将禁用所有视图控制器中的旋转,无论是否附加到根。
jexiocij8#
项目导航器>“您的项目”>“常规”>“部署信息”>设备方向
只检查你想要的,不检查你不想要的。