如何计算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的更新大小。