【问题标题】:Add Constraint to navigationBar Programmatically Swift以编程方式将约束添加到导航栏 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

【问题讨论】:

    标签: ios swift uiimageview uinavigationbar nslayoutconstraint


    【解决方案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 时不起作用,你能告诉我为什么吗?
    • 当我创建“let imageView”并添加这个verticalSpace时,它工作得很好,但是当我尝试在@IBOutlet imageView上这样做时它没有,我在故事板中创建了imageview,所以我可以看到发生了什么on 和约束不再起作用,没有更改代码,除了以编程方式添加 imageview 我将其添加到情节提要中
    • @EICaptainv2.0 能否更新您的答案以反映 iOS 10 的发布,就像 Andy Novak 的回答说:stackoverflow.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)
              ])
          }
          

          【讨论】:

            猜你喜欢
            • 2016-05-28
            • 1970-01-01
            • 2011-02-20
            • 1970-01-01
            • 1970-01-01
            • 2017-04-22
            • 1970-01-01
            • 1970-01-01
            • 2015-09-17
            相关资源
            最近更新 更多