我正在尝试根据official doc
实现自定义控件问题是放入HorizontalStackVIew的UIButton对象会填充其所有空间而忽略其按钮约束(width = 4.0 height = 4.0)。 (我尝试使用VerticalStackVIew和UITextView等,但它是一样的)
class MyControl: UIStackView {
override init(frame: CGRect) {
super.init(frame: frame)
setupButtons()
}
required init(coder: NSCoder) {
super.init(coder: coder)
setupButtons()
}
private func setupButtons() {
// Create the button
let button = UIButton()
button.backgroundColor = UIColor.red
// Add constraints
button.translatesAutoresizingMaskIntoConstraints = false
button.heightAnchor.constraint(equalToConstant: 4.0).isActive = true
button.widthAnchor.constraint(equalToConstant: 4.0).isActive = true
// Add the button to the stack
addArrangedSubview(button)
}
我已经有了这个日志,但不知道如何处理它:
2017-02-10 16:59:31.900999 MyControl [1835:91456] [LayoutConstraints]无法同时满足约束条件。 可能至少以下列表中的一个约束是您不想要的约束。 试试这个: (1)看看每个约束,并试图找出你不期望的; (2)找到添加了不需要的约束或约束的代码并修复它。 ( "&#34 ;, "&#34 ;, "&#34 ;, "" )
将尝试通过违反约束来恢复
在UIViewAlertForUnsatisfiableConstraints处创建一个符号断点,以便在调试器中捕获它。 在列出的UIView上的UIConstraintBasedLayoutDebugging类别中的方法也可能有所帮助。 2017-02-10 16:59:31.950461 MyControl [1835:91456] [LayoutConstraints]无法同时满足约束条件。 可能至少以下列表中的一个约束是您不想要的约束。 试试这个: (1)看看每个约束,并试图找出你不期望的; (2)找到添加了不需要的约束或约束的代码并修复它。 ( "&#34 ;, "&#34 ;, "&#34 ;, "" )
将尝试通过违反约束来恢复
在UIViewAlertForUnsatisfiableConstraints处创建一个符号断点,以便在调试器中捕获它。 UIView中列出的UIVonstraintBasedLayoutDebugging类别中的方法也可能有所帮助。
Xcode 8.2.1
答案 0 :(得分:0)
你可以试试这个:
class CustomStackView:UIStackView{
override init(frame:CGRect){
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setUpButton()
}
func setUpButton(){
let button:UIButton = UIButton(type: .custom)
button.backgroundColor = .red
self.distribution = .fill
self.addArrangedSubview(button)
}
}
答案 1 :(得分:-1)
我成功创建了UIStackView对象并仅以编程方式将视图(按钮)放入其中(通过对象库中的故事板上的拖放创建它失败)
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle("Button", for: .normal)
button.backgroundColor = .red
stackView.addArrangedSubview(button)
view?.addSubview(stackView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}