ios - 导航栏标题的视图自动布局
问题描述
我有一个简单的类,它创建一个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()
但到目前为止没有成功。如何将视图放置为导航栏的标题,以及该视图内的布局元素?
解决方案
我猜这是订单错误
self.addSubview(theLabel) // first
NSLayoutConstraint.activate([ // then second
theLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
theLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
])
推荐阅读
- javascript - 只有一个使用 react-grid-layout 的 highcharts 可以调整大小
- influxdb - 为什么 InfluxDB v2 配置文件不起作用?
- javascript - 在谷歌标签管理器中使用 Javascript Shopify 产品变体
- fonts - 如何在 Jupyter Lab 中更改输出单元格的字体
- java - 裁剪图像与形状
- javascript - 组合数组中的不同对象
- php - 如何从 2 个表中获取匹配的行
- c++ - 将消息从 C++ Windows 桌面应用程序发送到 DLL
- mongodb - MongoDB:***在将独立集转换为副本集期间出现 fassert() 失败错误后中止
- audiounit - 如何从音频单元获取 NSView 对象