6

这是一个集合视图,限制在超级视图的顶部、左侧、右侧和底部,并启用了安全区域布局指南:

在此处输入图像描述

我希望我的集合视图标题显示状态栏下。我通过取消选中控制器 main 的尺寸检查器中的Safe Area Layout Guideview并添加以下代码,为 iPhone 4 - 8+ 屏幕尺寸实现了这一点:

collectionView.contentInset = UIEdgeInsets(top: -20, left: 0, bottom: 0, right: 0)

这对于非 iPhone X视图尺寸看起来很棒:

在此处输入图像描述

但是,对于 iPhone X,这会导致以下输出:

在此处输入图像描述

iPhone X 的状态栏有自己的尺寸。进一步调整顶部插图确实有效,但会过度偏移其他设备尺寸。我想知道是否有更优雅的方式来实现这种行为。

4

5 回答 5

10

找到了解决方案:

collectionView.contentInset.top = -UIApplication.shared.statusBarFrame.height
于 2018-02-22T20:06:06.373 回答
5

以前的解决方案有效,但这可能是最简单的一个:

collectionView.contentInsetAdjustmentBehavior = .never

于 2019-11-26T16:38:43.077 回答
2

这会做

collectionView.contentInsetAdjustmentBehavior = .never
于 2020-12-25T16:01:23.140 回答
2

你应该为 iphone X 使用 safeAreaInsets

if #available(iOS 11.0, *) {
    if let top = UIApplication.shared.keyWindow?.safeAreaInsets.top {
        collectionView.contentInset = UIEdgeInsets(top: -top, left: 0, bottom: 0, right: 0)
    }
} else {
    // Fallback on earlier versions
    collectionView.contentInset.top = -UIApplication.shared.statusBarFrame.height
}
于 2018-02-28T14:11:25.127 回答
1

添加2个约束:

1) 视图 - 超级视图

在此处输入图像描述

2) 视图 - 安全区域

在此处输入图像描述

于 2018-02-28T13:57:28.590 回答