【问题标题】:Rotating iPhone 6 Plus results in gray detail view controller?旋转 iPhone 6 Plus 会导致灰色细节视图控制器?
【发布时间】:2014-10-27 20:57:08
【问题描述】:

我在使用拆分视图控制器时遇到了一个奇怪的问题,我已经能够在一个全新的应用程序中非常轻松地重现该问题。如果您将 iPhone 6 Plus 旋转为横向,主视图控制器和详细视图控制器在屏幕上可见,但如果您随后旋转回纵向并切换选项卡然后旋转到横向,则详细视图控制器将完全灰色,好像什么都没有。这已记录到控制台:<Error>: CGImageCreate: invalid image size: 0x0 我想知道您是否知道原因或可以采取哪些措施来修复此错误。

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

重现错误:在 iPhone 6 Plus 上以纵向启动应用程序,旋转到横向,旋转回纵向,点击第二个或第三个选项卡,旋转到横向
错误: 详细视图控制器完全为灰色
预期: 如果您启动应用程序,点击不同的选项卡,然后旋转到横向,详细视图控制器应该会像平常一样显示

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

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

我的问题是,这个灰屏是 iOS 中的一个错误,还是这个设置有问题,或者有什么办法可以防止这种情况发生?

应该如何显示:

执行上述步骤后的显示效果:

【问题讨论】:

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


    【解决方案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 并返回它。

    希望这种方法也适用于您。

    【讨论】:

    • 这确实解决了问题!这似乎是iOS中的一个错误,不是吗?我已经提交了错误报告,你也提交了吗?
    • 灰色屏幕表示未初始化的 VC,所以我们需要初始化它,并且提到的方法似乎是正确的地方。但是我遇到的情况有点不同,请检查我在博客文章中链接的代码。我实际上是同时显示两个表视图。一个在小学,另一个在中学。不确定它是否是一个错误。如果您收到 Apple 的回复,请告诉我。如果您可以分享它,我也很高兴看到您的代码,看看是否有任何其他方法会更好。
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2013-01-13
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多