2016-12-16 89 views
3

我正在制作一款应用程序,可以在横向和纵向模式下使用iPad。 我UIViewControllers的结构如下:当设备方向改变时,UIViewController不会更新视图的约束

我有一个UICollectionView其具有以下约束的UIViewController顶部,前置,并且底部设置为与它的父(在上海华是我的UIViewControllerUIView)。

当我点击一个单元格时,我推动另一个UIViewControllerUINavigationController这是一个单元格的详细viewController。简单。

当我更改第一个视图控制器中的设备方向时,UICollectionView界限被正确设置。

来到这里,我问题

如果我选择在UICollectionView细胞,显示第二细节的viewController。那么如果在这第二个ViewController中我改变了设备的方向,然后我回到第一个viewController中,我的UIViewController的视图还没有被旋转过。我不知道为什么,我试着没有成功:

self.view.layoutIfNeeded()在我的firstViewController的viewDidAppear()根据当前的方向更新约束,它没有工作。这没有工作,因为我注意到一件事:

我的第一个viewController的框架视图仍然是以前的方向相同,它并没有改变......但如果我再次旋转设备,检测UIViewController方向改变,视图边界设置正确。

所以我的问题是:当我在第二个视图控制器,并且我正在旋转设备,然后回到前一个视图控制器时,前一个控制器未检测到方向更改我只是在第二个视图控制器。

GIF演示:

enter image description here

那之后,我做了一个旋转从纵向到横向模式时,视图改变调试视图层次工具如下所示:

enter image description here

UIView仍然是肖像,所以UICollectionView约束的不能用新方向更新...

任何想法?

回答

5

通过在viewWillAppear方法与屏幕边界复位视图的帧在我的第一的viewController解决:

public override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    self.view.frame = UIScreen.main.bounds 
    self.view.layoutIfNeeded() 
} 

如同我的viewController的主要的UIView有正确的帧,并且所述约束条件可以是当我在我的UIView上调用layoutIfNeeded()时自动更新。