你可以在iOS应用中全局禁用旋转吗?

dz6r00yl  于 2023-10-21  发布在  iOS
关注(0)|答案(8)|浏览(110)

我有一个由很多视图控制器组成的应用程序.在项目摘要中,我将Portrait方向设置为唯一支持的设备方向。
然而,该应用程序仍然得到混乱时,侧身。
我的问题是,有没有一种方法可以通过应用程序委托或其他方式全局禁用自动旋转?
或者我必须进入我所有的视图控制器并添加“shouldAutorotateToInterfaceOrientation”方法?
只是不想错过把它加到一个或什么东西上...
谢谢你,谢谢

uxhixvfz

uxhixvfz1#

在Info.plist中展开“Supported interface orientations”并删除Landscape项,使应用程序仅在纵向模式下运行。

xmq68pz9

xmq68pz92#

现在info.plist中有三种设备方向键。
1.支持的界面方向(iPad)
1.支持的界面方向(iPhone)
1.支持的界面方向
第三个是我认为非通用应用程序,其余两个是iPad和iPhone。
你应该给予他们一个尝试。

zy1mlcev

zy1mlcev3#

在努力设置UIViewController的shouldAutorotatesupportedInterfaceOrientation方法后,在iOS6中没有成功,我发现最有效的是在应用程序委托中设置它。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait;
}

然而,返回UIInterfaceOrientationMaskPortraitUpsideDown是崩溃我的应用程序。我不知道我做错了什么!

t0ybt7op

t0ybt7op4#

在根视图控制器的方法中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

设置'return NO';
这应该对所有视图都适用。

n53p2ov0

n53p2ov05#

如果你支持iPad,那么你不应该取消选中横向方向,因为它会阻止你的应用程序被苹果在App Store上接受。
为了防止在应用程序显示第一个屏幕之前旋转,请将此文件放在AppDelegate中。
这个方法在iOS 7.1上面的工作和测试。

// G - fix for ipad.
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait;
}
kwvwclae

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似乎不起作用!

bq9c1y66

bq9c1y667#

Swift
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选项卡中编辑Info.plist文件。这里有一个“界面方向”键,每个值代表一个支持的方向。删除除肖像以外的所有视图控制器将禁用所有视图控制器中的旋转,无论是否附加到根。

jexiocij

jexiocij8#

项目导航器>“您的项目”>“常规”>“部署信息”>设备方向
只检查你想要的,不检查你不想要的。

相关问题