ios - 如何计算不同方向的 iOS 11 尺寸?

标签 ios swift ios11 xcode9 safearealayoutguide

我根据具有水平滚动和自定义布局的 UICollectionView 的安全区域计算 itemSize。

image

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

最佳答案

编辑

要在不创建任何额外 View 的情况下获得安全区域大小,请使用:

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)
    }
}

在完成 block 中,您将获得所需的大小,但请注意,此代码将在旋转之后调用。

原始答案

使用额外的 UIView 的解决方案:

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

enter image description here

我创建了一个 @IBOutletUIView 并在 viewDidLayoutSubviews() 中检查大小:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    print(containerView.frame.size)
}

旋转后,我还获得了该 UIView 的更新大小。

关于ios - 如何计算不同方向的 iOS 11 尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299541/

相关文章:

ios - NavigationConroller 中的 TabBarController

ios - 如何旋转.transitionCurlDown动画?

ios - SwiftUI 跨多个 subview 拖动手势

swift - 测试时如何断言异步抛出错误?

admob - Google Admob实时广告未在真实设备上的iOS 11中展示

ios - 以编程方式关注创建为 AccessoryView 的 UITextView

iphone - 如何按价格对应用内购买的产品进行排序?

ios - 我在第二个 View 上有一个 UISwitch,如何控制切换方法

ios - 在运行 iOS 11 的 iPad 上禁用 anchor 预览

ios - 应用程序即将激活后如何刷新TableView?