以编程方式添加约束以防止按钮重叠 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约束