无法在 UIStackView 中设置编程布局约束
Posted
技术标签:
【中文标题】无法在 UIStackView 中设置编程布局约束【英文标题】:Cannot Set Programmatic Layout Constraints in UIStackView 【发布时间】:2017-05-25 01:52:38 【问题描述】:我正在尝试将通过情节提要创建的 UIStackView 中的单选按钮居中。但是,单选按钮是根据 Firebase 中的数据以编程方式在 UIStackView 中创建的。
我正在使用DLRadioButtons 提供的库。
UIStackView在Label下面,命名为radiostackView:
根据 Firebase 数据添加单选按钮的代码:
`
pollRef.observe(FIRDataEventType.value, with: (snapshot) in
self.numberOfChildren = Int(snapshot.childSnapshot(forPath: "answers").childrenCount)
self.passLabel.text = String(self.numberOfChildren)
print(self.numberOfChildren)
var buttons = [DLRadioButton]()
for x in 0..<self.numberOfChildren
let answerLabel = snapshot.childSnapshot(forPath: "answers").childSnapshot(forPath: String(x+1)).childSnapshot(forPath: "answer").value
let firstRadioButton = self.createRadioButton(frame: CGRect(x: 1, y:1 , width: 80.0, height: 1.0), title: answerLabel as! String, color: UIColor.black)
firstRadioButton.tag = x
firstRadioButton.translatesAutoresizingMaskIntoConstraints = false
buttons.append(firstRadioButton)
let margins = self.radioStackView.layoutMarginsGuide
firstRadioButton.topAnchor.constraint(equalTo: margins.topAnchor, constant: 5).isActive = true
self.radioStackView.addArrangedSubview(firstRadioButton)
let groupButtons = DLRadioButton()
groupButtons.otherButtons = buttons
)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
` 输出:按钮不直接堆叠在一起;尝试使用界面生成器,但仍然无法删除间距
【问题讨论】:
【参考方案1】:要在stackView
中堆叠视图,您需要使用addArrangedSubview
self.radioStackView.addArrangedSubview(firstRadioButton)
【讨论】:
感谢您的帮助,我已经更新了代码。我现在无法让按钮直接堆叠在一起。有什么想法吗? 检查spacing属性 我使用了界面生成器,我正在玩这些设置并且间距没有改变。stackView
与约束一起使用,因此您必须为所有 arrangedSubviews
或 stackView
本身设置高度约束
谢谢,我添加了编程约束(顶部锚点),但现在出现运行时错误。感谢您的帮助。以上是关于无法在 UIStackView 中设置编程布局约束的主要内容,如果未能解决你的问题,请参考以下文章
Barrier 未在约束布局中设置为 referenceIds?
使用swift在UiStackview中设置UiLabel的高度