我正试图通过自动布局以5个按钮创建堆栈视图。当我运行该项目时,它不会显示任何错误,但不会显示按钮堆栈。
另一方面,它在Debug View Hierarchy中显示“视图布局模糊。” 我在这里缺少的内容。
class TestView: UIView {
var stackView = UIStackView()
override init(frame: CGRect) {
super.init(frame: frame)
initComponents()
}
func initComponents() {
self.autoresizesSubviews = false
stackView.autoresizesSubviews = false
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.distribution = .equalSpacing
stackView.axis = .horizontal
stackView.alignment = .fill
stackView.contentMode = .scaleToFill
addSubview(stackView)
NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
stackView.topAnchor.constraint(equalTo: self.topAnchor),
stackView.bottomAnchor.constraint(equalTo: self.bottomAnchor),
])
for i in 0...4 {
let button = UIButton()
button.titleLabel?.text = "\(i)"
button.translatesAutoresizingMaskIntoConstraints = false
stackView.addSubview(button)
button.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 1).isActive = true
button.widthAnchor.constraint(equalTo: button.heightAnchor, multiplier: 1).isActive = true
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}}
在ViewController.swift文件中
let frame = CGRect(x: 0, y: 0, width: 200, height: 30)
let test = TestView.init(frame: frame)
self.view.addSubview(test)
答案 0 :(得分:0)
为了使这项工作有效,我不得不做出一些改变:
button.setTitle(_:for:)
设置按钮的标题。button.setTitleColor(_:for:)
为文本设置颜色。stackView
将按钮添加到stackView.addArrangedSubview(button)
。此外,您可能需要将框架向下移动一点。它位于左上角,位于状态栏上方,位于iPhone X的凹槽后面。
for i in 0...4 {
let button = UIButton()
button.setTitle("\(i)", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false
// Set these colors to whatever you like
button.setTitleColor(.black, for: .normal)
button.backgroundColor = .red
stackView.addArrangedSubview(button)
button.heightAnchor.constraint(equalTo: stackView.heightAnchor, multiplier: 1).isActive = true
button.widthAnchor.constraint(equalTo: button.heightAnchor, multiplier: 1).isActive = true
}