如何(用程序)设置视图的边距



我是UIKit的新手。我在父视图中有一个UICollectionView,它可以在这样的约束下正常工作

...
addSubview(collectionView)
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.topAnchor.constraint(equalTo: topAnchor).isActive = true
collectionView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
collectionView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
...

但我需要的是将这个UICollectionView绑定到父视图的底部(目前它显示在中心(。

为了做到这一点,我删除了顶部约束

...
addSubview(collectionView)
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
collectionView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
...

但画面却消失了。然后我尝试添加宽度和高度

...
collectionView.widthAnchor.constraint(equalToConstant: 80).isActive = true
collectionView.heightAnchor.constraint(equalToConstant: 80).isActive = true
...

但这也于事无补。

我还试图添加边距,以便将UICollectionView移到底部,但也没有成功。

我在这里错过了什么?

编辑

底线是,我需要将我的收藏视图绑定到视图的底部。

我做的最后一次尝试是

...
collectionView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor).isActive = true
collectionView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor).isActive = true
collectionView.heightAnchor.constraint(equalToConstant: 200).isActive = true
...

但是视图占用的空间比我需要的要多,所以我试着把数字降低到150

...
collectionView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor).isActive = true
collectionView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor).isActive = true
collectionView.heightAnchor.constraint(equalToConstant: 150).isActive = true
...

景色消失了。。。

发生了一些奇怪的事情:(

看起来它唯一的工作方式是-

...
collectionView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor).isActive = true
collectionView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor, constant: 75).isActive = true
collectionView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor).isActive = true
collectionView.heightAnchor.constraint(equalTo: layoutMarginsGuide.heightAnchor).isActive = true
...

但我认为这不是合适的配置。

视图有两个维度。必须指定其垂直和水平位置和大小。

当您指定了与已知超视图相关的顶部、左侧、底部和右侧时,就是在执行此操作。

当您取消顶部约束时,您的视图没有高度,因此它消失了。

添加高度限制是很好的,尽管80的高度非常小。但您仍然需要一个顶部或底部约束。

此外,不能在添加宽度约束的同时保留左右约束,因为它们相互矛盾。

基本上,你只需要下定决心,说出你想要的,不要模棱两可或自相矛盾。

最新更新