Ios 当导航栏隐藏时更改单元格高度

Ios 当导航栏隐藏时更改单元格高度,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,我有一个UICollectionViewController,其中的单元格表示屏幕的视图。我这样做是为了创建一个自定义选项卡栏,当选择选项卡栏上的某个单元格时,该选项卡栏将更改为另一个单元格 我认为当导航栏隐藏时,我需要更改单元格高度,但我不确定如何做,或者这种设置是否“不好” 以下是我的所有约束条件(menuBar是底部的白色工具栏): 在这里,我设置每个项目的大小: func collectionView(_ collectionView: UICollectionView, layout

我有一个UICollectionViewController,其中的单元格表示屏幕的视图。我这样做是为了创建一个自定义选项卡栏,当选择选项卡栏上的某个单元格时,该选项卡栏将更改为另一个单元格

我认为当导航栏隐藏时,我需要更改单元格高度,但我不确定如何做,或者这种设置是否“不好”

以下是我的所有约束条件(
menuBar
是底部的白色工具栏):

在这里,我设置每个项目的大小:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: view.frame.width, height: view.frame.height - 44)
}
因为我的代码中有这一行

navigationController?.hidesBarsOnSwipe = true
导航栏正确隐藏,但我留下了这个结果(蓝色是一个单元格):

之前

之后


您有一个空白,因为您要求集合视图在内容底部到集合视图按钮之间有一个填充。这是你的密码

collectionView?.contentInset = UIEdgeInsetsMake(0, 0, 44, 0)
collectionView?.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 44, 0)
当您尝试将
hidesBarsOnSwipe
设置为true时,确保集合视图对其周围环境具有正确的约束非常重要,因为当导航栏隐藏时,集合视图实际上使用了导航栏的空间。因此,首先,确保将视图控制器的
自动调整滚动视图插入设置为false。然后,确保集合视图的顶部和底部约束在集合视图和顶部按钮布局指南之间连接,如下所示


最后,删除内容插入代码,这两行代码的按钮填充为44。

我认为您需要将
self.automaticallyAdjustsScrollViewInsets=false
添加到视图控制器的
viewDidLoad
方法中。@Moabdul Hameed我刚刚注意到我的状态栏背景正在消失,你解决了这个问题!但不幸的是,除了状态栏的颜色是正确的之外,空白仍然存在。@这是一个布局问题。你能发布你的收藏视图的布局限制吗?@方明宁我想我都知道了。查看我的编辑因为我没有使用IB,superview会是什么?我是否会执行类似于
collectionView?.topanch.constraint(equalTo:superview).isActive=true
@defolition尝试此
collectionView?.topanch.constraint(equalTo:topLayoutGuide.bottomAnchor).isActive=true
这不起作用,因为我在底部有自定义工具栏--我需要一种方法将锚定设置到菜单栏的顶部。你知道实现这一点的方法吗?@defolition使用类似的语法。现在,您希望CollecView的botto与menubar粘在一起。因此,您的代码应该是
collectionView?.bottomAnchor.constraint(equalTo:menubar.topachor).isActive=true
:(它不起作用。我之前试过这个,结果程序崩溃了,说这是非法的,但现在菜单栏没有出现。我想我需要根据拖动更改单元格大小,或者以不同的方式设置整个视图。
collectionView?.contentInset = UIEdgeInsetsMake(0, 0, 44, 0)
collectionView?.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 44, 0)