旋转iPhone 6 Plus会产生灰色细节视图控制器吗?

时间:2014-10-27 20:57:09

标签: rotation ios8 uitabbarcontroller uisplitviewcontroller iphone-6-plus

我遇到了分割视图控制器的一个奇怪问题,我已经能够在一个全新的应用程序中轻松地重新创建该问题。如果您将iPhone 6 Plus旋转到横向,主屏幕和细节视图控制器将在屏幕上显示,但如果您然后旋转回纵向并切换标签然后旋转到横向,则详细视图控制器将完全变灰,就像没有任何东西一样。这将记录到控制台:<Error>: CGImageCreate: invalid image size: 0x0我想知道您是否知道原因或可以采取哪些措施来解决此错误。

设置UITabBarController,其中包含三个标签,每个标签都是通过Interface Builder拖出的默认UISplitViewController。子类UISplitViewController并将3个拆分视图更改为该类。在viewDidLoad中将拆分视图控制器的委托设置为self。然后从splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:返回YES。这会将其设置为在旋转回纵向而不是默认的详细信息视图控制器后,主控制器仍然可见。

重现错误:在iPhone 6 Plus上以纵向方式启动应用,旋转至横向,旋转回纵向,点按第二个或第三个标签,旋转至横向 错误:详细视图控制器完全是灰色的 预期:详情视图控制器应该像启动应用时一样显示,点按其他标签,然后旋转到横向

其他信息:一旦发生这种情况,如果您旋转回纵向然后返回另一个标签,它还会在旋转到横向时显示灰色细节控制器。应用程序必须强制退出并重新启动才能在横向上查看这些拆分视图。

现在我注意到如果您打开应用程序并显示第一个选项卡,如果您将iPhone 6 Plus旋转到横向,它实际上会初始化标签栏控制器中的每个主控和详细视图控制器(另外5个视图控制器) - 如果你继承那些控制器,它会在viewDidLoad中设置的断点处停止。我希望它只初始化屏幕上显示的拆分视图控制器的详细视图控制器。我想知道这是否是预期的行为?我相信它可能与这个bug有关。

我的问题是,这个灰色屏幕是iOS中的错误,还是这个设置有问题,还是可以做些什么来防止这种情况发生?

应该如何出现:
Screenshot of expected appearance

按照上述步骤显示的方式:
Screenshot of gray detail view controller bug

1 个答案:

答案 0 :(得分:1)

我在处理我的Multiple Detail Views样本时遇到了一些奇怪的事情。我实际上在6+模拟器中显示2个表视图而不是1个表视图和1个详细信息视图。我可以通过从SplitViewController delegateseparateSecondaryViewControllerFromPrimaryViewController方法返回我的详细视图控制器来修复它。

我的代码是这样的:

func splitViewController(splitViewController: UISplitViewController, separateSecondaryViewControllerFromPrimaryViewController primaryViewController: UIViewController!) -> UIViewController? {
    if let primaryAsNavController = primaryViewController as? UINavigationController {
        if let topAsTableViewController = primaryAsNavController.topViewController as? TableViewController2 {
            //Return Navigation controller containing DetailView1 to be used as secondary view for Split View
            return (UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("detail1Nav") as UIViewController)
        }
    }
return nil
}

对我来说,只有当TableView2是TopViewController时才会发生,所以我正在检查它,如果是,我正在初始化我想要的DetailViewController并返回它。

希望这种方法也适合你。