【问题标题】:Displaying buttons with programmatic constraints显示带有编程约束的按钮
【发布时间】:2017-01-08 05:06:07
【问题描述】:

尽管为我的按钮添加了前导锚点和顶部锚点的约束(我试图在列表中显示它们),但视图将它们全部显示在视图的左上角。我正在调用许多方法来尝试应用约束,但它们似乎都不起作用。救命!

func displayButtonArray(buttons: [UIButton]) {
    var previousButton: UIButton = buttons[0]
    for (i, button) in buttons.enumerated() {
        button.setTitle("SampleButton", for: .normal)
        button.setTitleColor(.black, for: .normal)
        button.sizeToFit()

        let margins = self.view.layoutMarginsGuide
        button.leadingAnchor.constraint(equalTo: margins.leadingAnchor)
        if i == 1 {
            button.topAnchor.constraint(equalTo: margins.topAnchor, constant: CGFloat(5.0))
        } else {
            button.topAnchor.constraint(equalTo: previousButton.bottomAnchor, constant: CGFloat(10.0))
        }
        previousButton = button

        button.translatesAutoresizingMaskIntoConstraints = false
        button.setNeedsUpdateConstraints()
        button.setNeedsLayout()

        self.view.addSubview(button)
    }
    self.view.setNeedsUpdateConstraints()
    self.view.setNeedsLayout()
    self.view.layoutSubviews()
}

【问题讨论】:

  • 发现我的问题,我需要为我所做的约束设置 .isActive = true 。我假设这些函数在创建约束时会产生副作用,如果 isActive 设置为 true,那么它会产生副作用

标签: swift uiview uibutton xcode8 ios10


【解决方案1】:

正如您所指出的,约束已定义但未激活。

我可以补充一点,正如 Apple 所提到的,应该同时激活 AutoLayout 约束。

您可以一个一个地激活它们,但同时激活它们更有效;带来更好的性能。

【讨论】:

    猜你喜欢
    • 2021-08-09
    • 1970-01-01
    • 2015-10-09
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多