以编程方式将约束添加到导航栏 Swift
Posted
技术标签:
【中文标题】以编程方式将约束添加到导航栏 Swift【英文标题】:Add Constraint to navigationBar Programmatically Swift 【发布时间】:2016-02-29 08:16:10 【问题描述】:我正在尝试向导航栏添加约束,我有UIImageView
,它有宽度、高度并且水平居中,我想在UIImage
和navigationBar
之间添加垂直空间为0,我是尝试了大约 1 小时,但不知道怎么做,我尝试向 UIView
添加约束,并添加 navbarHeight + statusBarHeight
的常量,它起作用了,但我想在 imageview 和导航栏之间建立关系
let verticalSpace = NSLayoutConstraint(item: image, attribute: .Top, relatedBy: .Equal, toItem: self.view, attribute: .Top, multiplier: 1, constant: 0)
view.addConstraint(verticalSpace) // this works
【问题讨论】:
【参考方案1】:试试topLayoutGuide
let verticalSpace = NSLayoutConstraint(item: image,
attribute: .Top,
relatedBy: .Equal,
toItem: self.topLayoutGuide,
attribute: .Bottom,
multiplier: 1, constant: 0)
上述约束说明:
简称: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
【讨论】:
是的,这行得通,但是您能否解释一下这两个“属性”之间的区别,一个说 .Top 一个说 .Bottom,这是为什么呢? 我刚刚意识到这在使用插座 UIImageView 时不起作用,你能告诉我为什么吗? 让我们continue this discussion in chat。 当我创建“let imageView”并添加这个verticalSpace时,它工作得很好,但是当我尝试在@IBOutlet imageView上这样做时它没有,我在故事板中创建了imageview,所以我可以看到发生了什么on 和约束不再起作用,没有更改代码,除了以编程方式添加 imageview 我将其添加到情节提要中 @EICaptainv2.0 能否更新您的答案以反映 iOS 10 的发布,就像 Andy Novak 的回答说:***.com/a/51219283【参考方案2】:llkenny 对 iOS 11.0+ 的回答:
image.topAnchor.constraint(equalTo:
view.safeAreaLayoutGuide.topAnchor).isActive = true
【讨论】:
【参考方案3】:使用锚点:
image.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
【讨论】:
【参考方案4】:在故事板中。两个约束:
第一个:
第二个:
结果:
【讨论】:
【参考方案5】:代码:
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)
])
【讨论】:
以上是关于以编程方式将约束添加到导航栏 Swift的主要内容,如果未能解决你的问题,请参考以下文章