rotation - 旋转 iPhone 6 Plus 会导致灰色细节 View Controller ?

标签 rotation ios8 uitabbarcontroller uisplitviewcontroller iphone-6-plus

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

设置UITabBarController三个选项卡,每个选项卡都是默认的 UISplitViewController通过 Interface Builder 拖出。子类 UISplitViewController并将 3 个 Split View更改为该类。在 viewDidLoad 中将 Split View Controller 的委托(delegate)设置为 self .然后从 splitViewController:collapseSecondaryViewController:ontoPrimaryViewController: 返回 YES .这对其进行了设置,以便在旋转回纵向而不是默认的详细信息 View Controller 后,主视图仍然可见。

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

附加信息:一旦发生这种情况,如果您旋转回纵向,然后返回到不同的选项卡,它也会在旋转到横向时显示灰色细节 Controller 。该应用程序必须强制退出并重新启动才能在横向中查看这些 Split View。

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

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

它应该如何出现:
Screenshot of expected appearance

执行上述步骤时的显示方式:
Screenshot of gray detail view controller bug

最佳答案

在我的 Multiple Detail Views 上工作时,我自己遇到了一些奇怪的事情。样本。我实际上在 6+ 模拟器中显示了 2 个 TableView 而不是 1 个 TableView 和 1 个详细 View 。我可以通过从 separateSecondaryViewControllerFromPrimaryViewController 返回我的详细 View Controller 来修复它SplitViewController delegate的方法| .

我的代码是这样的:

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 并返回它。

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

关于rotation - 旋转 iPhone 6 Plus 会导致灰色细节 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26596703/

相关文章:

ios - 在应用程序启动/退出时暂停 spritekit 游戏 .. iOS8

ios - 导航到不在 UITabBar 上的 ViewController

iphone - 模态视图 Controller 隐藏标签栏

javascript - css,使用旋转和jquery到初始位置

swift - 旋转带有纹理的 SKShapeNode

ios - UIWebView 在 iOS 8 中显示空白屏幕

ios - iOS 7.1 中的 SpriteKit bodyWithTexture 等价物

ios - 旋转后以编程方式更改 UIkeyboard 的框架

android - 如何在自己的对象空间上进行旋转?

ios - 设置 rootViewContorller 时禁用 UITabBarController 动画