【问题标题】:iOS 8 - Launching the application in Landscape modeiOS 8 - 以横向模式启动应用程序
【发布时间】:2014-10-06 07:24:34
【问题描述】:

我的 iPad 应用程序支持所有方向,并且在 iOS 7 中也能正常工作。

但是在 iOS 8 中,以横向模式启动应用程序会使我的登录视图在纵向框架内绘制横向视图。

在做了一些分析后,我发现应用程序窗口在横向中启动时方向不正确。之后进行旋转会更正 UI,因为它从那时起采用正确的方向。

有人能指导我完成这个吗?提前致谢。

【问题讨论】:

    标签: ios ipad ios8 orientation xcode6


    【解决方案1】:

    问题似乎是设置窗口时的调用顺序。在分配rootViewController 之前,您需要调用makeKeyAndVisible。以下作品:

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.window makeKeyAndVisible];
    self.window.rootViewController = self.myMainViewController;
    

    但是如果你把顺序改为:

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = self.myMainViewController;
    [self.window makeKeyAndVisible];
    

    你得到你正在经历的行为。

    【讨论】:

    • 谢谢你,它适用于我的情况。我在 .xib 中设置了 rootViewController,自动设置了 rootViewController,所以我不得不断开那里的连接。我认为这是苹果应该修复的错误。
    • 如果窗口是从 xib 派生的怎么办?
    【解决方案2】:

    感谢 Dave Kammeyer 解决这个恼人的 iOS8 错误。

    如果您正在使用情节提要,您实际上无法访问makeKeyAndVisible,因为UIApplication 在调用AppDelegate 之前会自动将所有内容连接在一起。在这种情况下,我只是在application:didFinishLaunchingWithOptions:的开头重置rootViewController

    UIViewController* rootViewController = self.window.rootViewController;
    self.window.rootViewController = nil;
    self.window.rootViewController = rootViewController;
    

    然后应用程序以没有错误的横向启动。

    【讨论】:

    • 嗯,这是一个很好的提示,不幸的是,它在 2016 年对我来说不适用于 iOS10 等。但我所做的只是有一个空的“预加载”场景,它只是加载实际的第一个场景。
    【解决方案3】:

    我在 XIB 中设置了根视图控制器,在 MainWindow.xib 中设置了我的导航控制器,并且导航 ctlr 的根视图控制器是我实际的根视图控制器的类。因此,它会自动找到我的根视图控制器,将其实例化,并将其连接到导航控制器,然后连接到窗口。

    但是:显然这在游戏中为时过早,并且在横向模式下开始时会造成麻烦。

    所以我在 xib 中断开了 Window 与根视图控制器(作为导航控制器)的连接,并自己设置了根视图控制器:

    self.window.rootViewController = self.navigationController;
    

    效果与笔尖中的连接相同,但由于它发生在稍后的时间,现在可以了。

    【讨论】:

      【解决方案4】:

      以下代码对我有用

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
      {
          application.statusBarOrientation = UIInterfaceOrientationPortrait;
      
          // the rest of the method
      }
      

      希望对你有帮助!!!

      【讨论】:

        猜你喜欢
        • 2012-03-01
        • 1970-01-01
        • 2013-05-18
        • 2012-03-06
        • 1970-01-01
        • 2012-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多