如何计算iOS 11大小的不同方向?

我使用水平滚动和自定义布局计算取决于UICollectionView的安全区域的itemSize。

图片

但对于iPhone X安全区域有不同的大小,适合不同的方向。 我的问题是如何在viewWillTransition函数中计算横向的安全区域大小? 或者如果没有这个计算怎么办?

编辑

要在不创建任何其他视图的情况下获得安全区域大小,请使用:

view.safeAreaLayoutGuide.layoutFrame.size 

如果要使用viewWillTransition方法,可以使用:

 override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) // Before rotation print(view.safeAreaLayoutGuide.layoutFrame.size) coordinator.animate(alongsideTransition: { (context) in // During rotation }) { (context) in // After rotation print(self.view.safeAreaLayoutGuide.layoutFrame.size) } } 

在完成块中,您将获得所需的大小,但请注意,此代码将在轮换调用。

原始答案

使用其他UIView的解决方案:

我所做的是创建一个UIView并将其与常量0固定到安全区域指南,以便它始终匹配安全区域的大小:

在此处输入图像描述

我创建了一个UIView@IBOutlet ,并在viewDidLayoutSubviews()检查大小:

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() print(containerView.frame.size) } 

旋转后,我也得到了UIView的更新大小。