2

我有一个UISplitViewController其次(详细)VC是一个UICollectionViewController。我希望集合的单元格根据对集合视图的大小和方面的更改来调整大小。我通过重写UIContentContainer协议方法触发此调整大小:为什么viewWillTransitionToSize ...在displayModeButtonItem触发splitViewController崩溃时未调用?

// MARK: - UIContentContainer protocol methods 

override 
func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) 
{ 
    setFlowLayoutItemSizeForViewSize(size) 
    collectionViewLayout.invalidateLayout() 
} 

这就是所谓的和作品,当设备旋转我只是想如何;但是当按下splitViewController?.displayModeButtonItem()提供的按钮来显示或折叠主(主)视图控制器时,将调用此方法而不是。由于该崩溃必然会改变次级(细节)视图的大小,因此我应该尽可能在触发时调用viewWillTransitionToSize ...方法。

于是,两个问题:

1)如果该viewWillTransitionToSize ......其实方法按下displayModeButtonItem调用时?如果是这样,我似乎发现了一个错误。 2)如果我所看到的实际上是正确的行为,任何人都可以为我的辅助(详细)控制器提供一种方式来“知道”displayModeButtonItem被按下时,或者当它的大小改变为按下该按钮的结果?

谢谢!

卡尔

+1

你有没有找到解决方案? – jbouaziz

回答

2

1)不是一个错误; displayModeChange没有被处理过的sizeTransition

2)你UISplitviewController很可能已经有一个UISplitViewControllerDelegate可以实现可选:

splitViewController(_ svc: UISplitViewController, 
     willChangeToDisplayMode displayMode: UISplitViewControllerDisplayMode) 

方法将调用与UISplitViewControllerDisplayModePrimaryHiddenUISplitViewControllerDisplayModeAllVisible取决于哪种模式的SPLITVIEW是切换到。

+0

感谢您的回答!如果viewWillTransitionToSize也被调用,那真是太好了,因为willChangeToDisplayMode没有提供关于次视图控制器的结果大小的任何信息(这可以根据显示模式推断或计算特定的UI设计,但是我会真的很想有一个通用的方法)。 –

+0

有谁知道更好的方式,KVO(如在这里:http://stackoverflow.com/questions/25696281/how-can-i-prepare-a-uisplitviewcontroller-secondary-vc-for-a-change-to -displaymo)总是检测辅助视图控制器的大小已经或即将改变? –

+0

在这种情况下,我也需要触发viewWillTransitionToSize,并且在尝试弄清楚我是否可以触发它而不会触发任何东西 – SAHM

0

我解决这个问题的方法是子类UISplitViewController并重写viewWillTransitionToSize(...)如下:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) { 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 

    //Get the master controller 
    guard let masterController = viewControllers[0] as? UIViewController else { 
     return print("master controller not of type UINavigationController") 
    } 

    //Notify masterController that the view will transition 
    masterController.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator) 
} 

希望它能帮助!

相关问题