以编程方式向 navigationBar 添加约束 Swift

Add Constraint to navigationBar Programmatically Swift

我正在尝试向导航栏添加约束,我有 UIImageView,它具有宽度、高度并且水平居中,我想在 UIImage 之间添加垂直 space和 navigationBar 到 0,我试了 1 小时,但不知道如何,我尝试向 UIView 添加约束,并添加 navbarHeight + statusBarHeight 的常量,它起作用了, 但我想在 imageview 和 navbar

之间建立关系
let verticalSpace = NSLayoutConstraint(item: image, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 0)
view.addConstraint(verticalSpace) // this works

试试 topLayoutGuide

let verticalSpace = NSLayoutConstraint(item: image,  
                                       attribute: .Top,  
                                       relatedBy: .Equal,  
                                       toItem: self.topLayoutGuide,  
                                       attribute: .Bottom,  
                                       multiplier: 1, constant: 0)  

以上约束解释:

simply its called: vertical space between image.Top & self.topLayoutGuide.Bottom = 0

这意味着图像视图的顶部约束附加了 topLayoutGuide 的底部属性,常量为 0。

您也可以使用 anchors 来实现 iOS 10+

if #available(iOS 11.0, *) {
   image.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
} else {
   image.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
}

有锚点:

image.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true

llkenny 对 iOS 11.0+ 的回答: image.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true

在情节提要中。两个约束:

第一个:

第二个:

结果:

代码:

func mainCollectionViewConstraint() {
        NSLayoutConstraint.activate([
            mainCollectionView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10),
        mainCollectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        mainCollectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        mainCollectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
    ])
}