das*_*ist 3 ios autolayout swift uistackview
我试图添加两个动态UILabels到一个UIStackLabel.目标是将两个标签水平放置在视图中间.
这两个UILabels是:
var nameLabel: UILabel!
var ageLabel: UILabel!
Run Code Online (Sandbox Code Playgroud)
而且UIStackView是:
var stackedInfoView: UIStackView!
Run Code Online (Sandbox Code Playgroud)
我试图遵循本回答中提供的指导原则,配置我的观点:
nameLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 120.0, height: 24.0))
ageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 80.0, height: 24.0))
nameLabel.text = "Harry Potter"
ageLabel.text = "100"
stackedInfoView = UIStackView(arrangedSubviews: [nameLabel, ageLabel])
stackedInfoView.axis = .horizontal
stackedInfoView.distribution = .equalSpacing
stackedInfoView.alignment = .center
stackedInfoView.spacing = 30.0
stackedInfoView.centerXAnchor.constraint(equalTo: self.extendedNavView.centerXAnchor).isActive = true
stackedInfoView.centerYAnchor.constraint(equalTo: self.extendedNavView.centerYAnchor).isActive = true
self.extendedNavView.addSubview(stackedInfoView) //extendedNavView is configured inside Storyboard
Run Code Online (Sandbox Code Playgroud)
我的问题是,stackedInfoView不会出现.此外,当我打印它frame,我得到{{0, 0}, {0, 0}}.我也收到一堆关于的错误消息Unable to simultaneously satisfy constraints.
我做错了UIStackView什么?任何指导都非常感谢.
两个问题,
stackedInfoView.centerXAnchor.constraint(equalTo:self.extendedNavView.centerXAnchor).isActive = true
stackedInfoView.centerYAnchor.constraint(equalTo:self.extendedNavView.centerYAnchor).isActive = true
Run Code Online (Sandbox Code Playgroud)
应该放在后面self.extendedNavView.addSubview(stackedInfoView).因为在配置约束之前,堆栈视图必须位于视图层次结构中.
其次,添加stackedInfoView.translatesAutoresizingMaskIntoConstraints = false告诉UIKit您要使用自动布局来设置堆栈视图的位置.
如果extendedNavView故事板中没有布局问题,则以下代码应该有效:
override func viewDidLoad() {
super.viewDidLoad()
var nameLabel: UILabel!
var ageLabel: UILabel!
var stackedInfoView: UIStackView!
nameLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 120.0, height: 24.0))
ageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 80.0, height: 24.0))
nameLabel.text = "Harry Potter"
ageLabel.text = "100"
stackedInfoView = UIStackView(arrangedSubviews: [nameLabel, ageLabel])
stackedInfoView.axis = .horizontal
stackedInfoView.distribution = .equalSpacing
stackedInfoView.alignment = .center
stackedInfoView.spacing = 30.0
stackedInfoView.translatesAutoresizingMaskIntoConstraints = false
self.extendedNavView.addSubview(stackedInfoView) //extendedNavView is configured inside Storyboard
stackedInfoView.centerXAnchor.constraint(equalTo: self.extendedNavView.centerXAnchor).isActive = true
stackedInfoView.centerYAnchor.constraint(equalTo: self.extendedNavView.centerYAnchor).isActive = true
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6855 次 |
| 最近记录: |