6

在 iPhone 模拟器和 iPhone 3GS (iOS 6) 上,我都无法将方向设置为纵向倒置。我只有一个 ViewController。我在其中添加了这段代码:

-(BOOL) shouldAutorotate{
 return YES; 
}

-(UIInterfaceOrientation) preferredInterfaceOrientationForPresentation{
 return UIInterfaceOrientationPortraitUpsideDown;
}

- (NSUInteger)supportedInterfaceOrientations{
 return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}

-(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
  if (toInterfaceOrientation==UIInterfaceOrientationPortrait || toInterfaceOrientation==UIInterfaceOrientationPortraitUpsideDown) {
    return YES;
  }
 return NO;
}

我还将它添加到 AppDelegate.m:

-(NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
    return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}

我还检查了 plist 文件,两个方向都在那里。在我的故事板上,Simulated Metrics Orientation 设置为 Inferred。我在 applicationDidFinishLaunchingWithOptions 中什么都不做,除了返回 YES。我刚刚在这个 ViewController 中添加了一个 UIImageView。是否有可能使这种定向工作?

4

3 回答 3

11

supportedInterfaceOrientations返回一个NSUInteger. 它返回视图控制器支持的所有界面方向,一个界面方向值的掩码。

您需要返回UIInterfaceOrientationMaskEnum 中定义的值,如下所示:

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown);
}
于 2012-12-27T16:38:10.330 回答
1

我知道有一个有效的答案,但对于仍然遇到同样问题的其他人:

我有一个与 Xcode 相关的类似问题:尽管在所有情况下都返回YES,但不支持纵向旋转。- (BOOL) shouldAutorotateToInterfaceOrientation:结果是在我的目标项目编辑器的摘要窗口中启用了“支持的界面方向”:

在此处输入图像描述

上面的“iPhone/iPad 部署信息”选择没有这样做,尽管我只使用 iPhone sim,但似乎是“iPad 部署信息”部分控制了模拟器将做什么。一旦我在该部分中启用了相同的方向,iPhone 模拟就会工作,我能够测试模拟器旋转时发生的情况......

于 2013-04-17T10:33:25.583 回答
0

我为此尝试了很多方法。它似乎只是一种工作方式,但通过应用程序全局,不仅适用于特定的视图控制器。

首先,您必须在目标常规设置中检查设备方向的颠倒。

检查设备方向颠倒

然后,在导航控制器扩展中,您覆盖该supportedInterfaceOrientations方法

extension UINavigationController {
    override public func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return .All
    }
}
于 2016-08-02T06:35:19.577 回答