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

bog*_*ila 14 ios swift ios11 xcode9 safearealayoutguide

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

图片

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

jon*_*ren 11

编辑

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

view.safeAreaLayoutGuide.layoutFrame.size
Run Code Online (Sandbox Code Playgroud)

如果你想使用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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

原始答案

使用其他UIView的解决方案:

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

在此输入图像描述

我创建了一个@IBOutlet的是UIViewviewDidLayoutSubviews()检查大小:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    print(containerView.frame.size)
}
Run Code Online (Sandbox Code Playgroud)

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