adaptivePresentationStyleForPresentationController在6+上返回错误的traitCollection

时间:2016-02-17 11:00:07

标签: ios swift autolayout iphone-6-plus

当水平尺寸等级为常规时,我会呈现一个看起来像 popover 的视图,并且当呈现模态视图时水平尺寸等级紧凑

效果很好,在带有SplitView的iPad上,它可以调整大小,并且在任何非+ iphone中都可以作为弹出窗口使用,但在iPhone 6 +中,方法,

adaptivePresentationStyleForPresentationController(controller:UIPresentationController,traitCollection:UITraitCollection) - > UIModalPresentationStyle

被调用三次(仅在纵向模式下,在横向模式下正常工作),第一次返回一切正确(对于紧凑视图),但另外两次特征集合水平尺寸类被认为是常规的,所以它搞砸了我在视图上执行的布局更新。

我想知道为什么会在这个设备中发生这种情况(正如我所说,在iPad中使用SplitView进行调整很有效),如果它可能是一个workaroud它。这可能是一个强迫改变特质的超级观点的问题吗?

这是我的adaptativePresentationStyleForPresentationController方法

public func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {

  if controller.presentedViewController is ColorPickerCollectionViewController {
    colorPickerVC.collectionView?.setCollectionViewLayout(colorPickerFlowLayout(traitCollection), animated: true)
  }

  return (traitCollection.horizontalSizeClass == .Compact) ? .FullScreen : .None
}

事实证明,它在FullScreen模式下将视图显示为模态视图,除了它返回的最后两次.None,但我的collectionViewLayout会更新这些迭代。

提前致谢

1 个答案:

答案 0 :(得分:0)

我对另一个委托方法-presentationController:willPresentWithAdaptiveStyle:transitionCoordinator:运气好了。我正在尝试:

- (void)presentationController:(UIPresentationController *)presentationController willPresentWithAdaptiveStyle:(UIModalPresentationStyle)style transitionCoordinator:(nullable id<UIViewControllerTransitionCoordinator>)transitionCoordinator {
    if ([presentationController isKindOfClass:[UIPopoverPresentationController class]] && style == UIModalPresentationNone) {
        // popover!
    } else {
        // not popover
    }
}

奇怪的是,我还没有看到style取值UIModalPresentationPopover