ios - iPhone 6 Plus 模拟器中带有旋转和 Split View的竞争条件

标签 ios ios-simulator uisplitviewcontroller iphone-6-plus

我有一个主视图/详细 View ,底部有一个工具栏用于 iPhone,工具栏按钮向上移动到 iPad 的导航栏。这是我确定将它们放在哪里的代码:

private func isSplit() -> Bool {
    if let svc = self.splitViewController {
        return !svc.collapsed
    }
    else {
        return false
    }
}

func setActionLocation(notification: NSNotification) {
    if self.isSplit() {
        self.toolbarItems = nil
        self.navigationItem.rightBarButtonItems = [self.actionButton, self.deleteButton]
        self.navigationController?.setToolbarHidden(true, animated: false)
    }
    else {
        self.toolbarItems = self.savedToolbar
        self.navigationItem.rightBarButtonItem = nil
        self.navigationController?.setToolbarHidden(false, animated: false)
    }
}

对于 iPhone 6 Plus,它在横向拆分并在纵向折叠,所以我将其注册为设备方向更改时的通知:

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "setActionLocation:", name: UIDeviceOrientationDidChangeNotification, object: nil)

这在大多数情况下都能正常工作。但是,在模拟器(XCode 6.3.2,iOS Simulator 8.3)中,如果我以纵向开始,单击以转到详细 View ,然后快速(< 1 秒)旋转到横向,isSplit() 仍将返回 false 并且工具栏最终出现在错误的位置。如果我在旋转前稍等片刻,它就会正常工作。

由于我没有 iPhone 6 Plus,我还不知道这是否发生在真实硬件中,或者它是否是模拟器的产物。假设它是真实的,有没有办法避免这种情况?

最佳答案

我找到了更好的方法来处理这个问题,通过删除旋转通知并在我的 UISplitViewControllerDelegate。如果我还在看主视图,我需要创建一个细节 View Controller 并告诉它把图标移到顶部。如果我已经在查看详细 View ,我可以告诉该 View 将图标移到顶部。旋转代码处理了第二种情况而不是第一种情况,因为旋转时细节 View Controller 不存在,但 Split View仍然折叠。

顺便说一句,这应该也更有可能与 iOS 9 分屏多任务一起使用。

关于ios - iPhone 6 Plus 模拟器中带有旋转和 Split View的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957125/

相关文章:

javascript - 在WinJS中,如何调用openPane()?

ios - Swift - UIWebView baseURL 导致黑屏

ios - 无法设置从 iPhone 到 iPad 全屏的大小

parse-platform - 无法连接以在 iOS 模拟器中解析

ios - 如何在 IOS Delphi 上的 TWebbrowser 中设置用户代理

uiviewcontroller - Storyboard、UIViewController 和 UISplitViewController

ios - UITableViewCell 编辑附件颜色

ios - Swift - 如何使用 UIGraphics 混合模式?

ios - WKWebView 在模拟器上保持空白(允许任意加载)

ios - UISplitViewController : how to present master view in the detail view by button event instead of via a swipe gesture