首页 > 解决方案 > 导航栏标题的视图自动布局

问题描述

我有一个简单的类,它创建一个UIView包含标签的类。我想将该视图用作 a 的中心部分,UINavigationBar两侧各有 2 个按钮。下面的代码在不添加标签的情况下运行良好:

class myView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = .green
    }
}

我这样称呼班级:

let avatar = UIBarButtonItem(image: avatarImage, ...)
let otherButton = UIBarButtonItem(image: otherImage, ...)

navigationItem.leftBarButtonItems  = [avatar]
navigationItem.rightBarButtonItems = [otherButton]

let headerTitle = myView(frame: .zero)
headerTitle.translatesAutoresizingMaskIntoConstraints = false
navigationItem.titleView = headerTitleView

但是如果我在 UIView 中添加标签:

class myView : UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)

        self.backgroundColor = .green

        let theLabel = UILabel(frame: .zero)
        theLabel.text = "The Title"
        theLabel.textAlignment = .center
        theLabel.translatesAutoresizingMaskIntoConstraints = false

        self.addSubview(theLabel!)
    }
}

.. 我看到标签,但它粘在视图的最左侧。如果我尝试向标签添加约束,如下所示:

NSLayoutConstraint.activate([
    theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
    theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])

..它崩溃了,因为self(UIView)的大小仍然是.zero。

我尝试了 和 的各种组合layoutIfNeeded()sizeToFit()但到目前为止没有成功。如何将视图放置为导航栏的标题,以及该视图内的布局元素?

标签: iosswiftuinavigationbarnslayoutconstraint

解决方案


我猜这是订单错误

self.addSubview(theLabel) // first
NSLayoutConstraint.activate([  // then second
  theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
  theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])

推荐阅读