代码之家  ›  专栏  ›  技术社区  ›  Hélène Martin

如何避免在带有凹口的设备上的uiCollectionView搜索栏下方出现间隙?

  •  0
  • Hélène Martin  · 技术社区  · 5 年前

    我有一个 UICollectionView 与内容,我想滚动下面的透明导航栏。我还有一个 UIView 包含 UISearchBar 用户可以通过点击导航栏上的按钮进行切换:

    UICollectionView with contents that scroll below the transparent nav bar and custom search bar

    如上图所示,这对于没有凹口的设备很有效。我通过将内容插入顶部设置为 searchController.searchBar.frame.size.height 内容偏移到 -collectionView.contentInset.top - (navigationController?.navigationBar.frame.size.height ?? 0) - UIApplication.shared.statusBarFrame.size.height) .

    对于带有槽口的设备,当搜索栏第一次显示时,搜索栏和内容之间存在间隙。然后,当我开始搜索时,间距是正确的。如果我取消,内容不适合在屏幕上(也就是说,集合视图是可滚动的),则会出现搜索栏大小的间隙。如果内容确实适合屏幕,就没有这样的间隙。

    UICollectionView with contents that scroll below the transparent nav bar and custom search bar on device with notch

    这些约束在情节提要中设置。我唯一能找到我想要的行为的方法是将集合视图顶部约束到顶部布局指南底部-64,这当然不理想。

    很明显,我的心理模型出了问题。如何在有或没有凹口的设备上获得所需的行为,并理想地避免约束中的幻数?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Bhaumik Victor Sigler    5 年前

    这种行为是由于 安全区域布局指南 . 对于有切口的设备,顶部约束计算到安全区域的距离(从切口开始)。

    若要解决此问题,请转到情节提要->选择集合视图->选择顶部约束。您将看到一些与尺寸检查器上的约束相关的选项。将第二项更改为 大智慧超赢 而不是 安全区域 .

    screenshot of size inspector