当水平尺寸等级为常规时,我会呈现一个看起来像 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会更新这些迭代。
提前致谢
答案 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
。