以编程方式添加约束以防止按钮重叠 SWIFT 4

Posted

技术标签:

【中文标题】以编程方式添加约束以防止按钮重叠 SWIFT 4【英文标题】:Programatically add constraint to prevent button overlap SWIFT 4 【发布时间】:2017-10-16 14:36:35 【问题描述】:

我想知道是否有人可以帮助我解决编程限制。我想要的是:

我在一个循环内创建按钮,并且这些按钮彼此水平对齐。一些按钮具有不同的宽度,这意味着一个按钮可以与另一个按钮重叠。是否可以使用约束来防止重叠并在两者之间添加空格?

提前致谢

代码:

        for (j, _) in buttonInfo.enumerated()
        let button: UIButton = buttonArray[j]
        let stackView = UIStackView();

        stackView.spacing = 30;


        button.tag = Int((buttonInfo[j]?.pID)!)!
        button.setTitle(buttonInfo[j]?.title, for: .normal)
        button.addTarget(self, action: #selector(PalletViewController.productCall), for: .touchUpInside)

        let stock = Int(buttonInfo[j]!.stock)

        if(stock! == 0 || stock! < 0)
            button.isHidden = true;
        


        let views = ["view": view, "button": button] as [String : Any]





        let spacing = NSLayoutConstraint.constraints(withVisualFormat: "H:|-(10)-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views);

        view.addConstraints(spacing);


    

【问题讨论】:

你应该看看UIStackView 建议不要在循环中添加约束,您可以在循环时将这些按钮添加到字典中,然后在循环结束时,将这个[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[button]-(5)-[button]-(5)-[button]--|" options:0 metrics:nil views:nil];添加到按钮的父视图中,最后这些按钮得到一个空白是5 或者你想要的 @VictorJohn 嗨 vic,使用此代码时出现以下错误:let views = ["view": view]; NSLayoutConstraint.constraints(withVisualFormat:"H:|-[button]-(5)-[button]-(5)-‌​[button]--|",options:NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views)reason: Unable to parse constraint format: It's an empty string. 给我看你的代码,这样我就能找到问题@LifeOS @VictorJohn 编辑了我的帖子。 【参考方案1】:

堆栈视图是最佳选择,您也可以通过编程方式创建它。 https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/LayoutUsingStackViews.html

【讨论】:

以上是关于以编程方式添加约束以防止按钮重叠 SWIFT 4的主要内容,如果未能解决你的问题,请参考以下文章

StackView 中的按钮约束(以 Swift 编程方式)

Swift iOS以编程方式在导航栏下方设置scrollView约束

以编程方式使用约束 Swift 移动按钮

如何在 Swift 4 中以编程方式将 IBAction 添加到按钮?

以编程方式添加前导/顶部约束

如何使用 Swift 以编程方式添加约束