Ios iPhone 6 Plus模拟器中旋转和分割视图的比赛条件

Ios iPhone 6 Plus模拟器中旋转和分割视图的比赛条件,ios,ios-simulator,uisplitviewcontroller,iphone-6-plus,Ios,Ios Simulator,Uisplitviewcontroller,Iphone 6 Plus,我有一个主视图/详细视图,iPhone底部有一个工具栏,iPad的工具栏按钮向上移动到导航栏。以下是我决定将它们放在何处的代码: private func isSplit() -> Bool { if let svc = self.splitViewController { return !svc.collapsed } else { return false } } func setActionLocation(notif

我有一个主视图/详细视图,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)中,如果我从纵向开始,单击转到详细视图,然后快速(<1秒)旋转到横向,isSplit()仍将返回false,工具栏将出现在错误的位置。如果我在旋转前再等一会儿,它就会正常工作


因为我没有iPhone6Plus,所以我还不知道这是在真实的硬件中发生的,还是模拟器的产物。假设这是真的,有没有办法避免这种情况

我找到了更好的方法来处理这个问题,方法是删除旋转通知并实现
func-splitViewController(splitViewController:uiplitviewcontroller,separateSecondary-viewcontrollerfromPrimaryViewController-primaryViewController:UIViewController!)->UIViewController?
在我的
UISPlitViewController远程门中
。如果我还在看主视图,我需要创建一个局部视图控制器,并告诉它将图标移动到顶部。如果我已经在查看详细视图,我可以告诉该视图将图标移动到顶部。旋转代码处理了第二种情况,但没有处理第一种情况,因为旋转时不存在局部视图控制器,但分割视图仍处于折叠状态

顺便说一句,这也更有可能适用于iOS9分屏多任务处理