如何在带有缺口的设备上避免UICollectionView搜索栏下方的空白?

时间:2019-02-14 22:42:02

标签: ios swift uicollectionview nslayoutconstraint

我有一个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 个答案:

答案 0 :(得分:1)

此行为是由于安全区域布局指南引起的。对于具有缺口的设备,顶部约束条件将计算距安全区域的距离(从缺口开始)。

要解决此问题,请转到情节提要->选择CollectionView->选择顶部约束。您将看到与“大小”检查器上的约束相关的几个选项。将第二项更改为 SuperView ,而不是安全区域

screenshot of size inspector