使用自动布局 Swift 定位 uibutton

Posted

技术标签:

【中文标题】使用自动布局 Swift 定位 uibutton【英文标题】:Position uibuttons with auto-layout Swift 【发布时间】:2015-09-22 13:34:51 【问题描述】:

我有一个uiview 和两个uibuttons。 问题是 - 我无法理解如何使用auto-layout constraints 来按以下方式定位它们

提前感谢您的任何见解!

【问题讨论】:

这是不可能的。您需要根据屏幕大小保持一个动态约束。例如。 15%-[btn1(25%)]---动态距离---[btn2(25%)]-15% @AshishP。让我们假设动态约束方法很好。那我该如何实现呢? 这是针对 Swift 1.2 还是 Swift 2 的?仅限 ios 9? @Abizern 这是 swift 2.0,我目前正在 iOS9 上测试,但我不希望它独占。 【参考方案1】:

试试这样的:

   //Individual button Width
    self.view.addConstraint(NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Width, multiplier: 0.25, constant: 0))
    self.view.addConstraint(NSLayoutConstraint(item: button2, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Width, multiplier: 0.25, constant: 0))

    //Button1 left spacing
    self.view.addConstraint(NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.Leading, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Leading, multiplier: 1, constant: self.view.frame.size.width * 0.15))

    //Button2 Right Spacing
    self.view.addConstraint(NSLayoutConstraint(item: button2, attribute: NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Trailing, multiplier: 1, constant: -self.view.frame.size.width * 0.15))

    //Y placement
    self.view.addConstraint(NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0))
    self.view.addConstraint(NSLayoutConstraint(item: button1, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: button2, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0))

此外,您需要重置旋转约束,因为 self.view.frame.size.width 会发生变化。已用于计算约束常数。

【讨论】:

完美运行。谢谢。【参考方案2】:

如果您不想重置约束,可以尝试像这样设置间距约束:

self.view.addConstraint(NSLayoutConstraint(item: self.view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: button1, attribute: NSLayoutAttribute.CenterX, multiplier: 0.275, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: self.view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: button2, attribute: NSLayoutAttribute.CenterX, multiplier: 0.625, constant: 0))

注意视图的顺序是颠倒的。

我已经在 IB 上成功使用它,应该可以从代码中工作。

【讨论】:

以上是关于使用自动布局 Swift 定位 uibutton的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 自动布局动画 UIButton

如何使用自动布局来对齐这两个 UIButton?

stackView swift中uibutton问题的自动布局/宽度

swift 设置UIbutton图片文字位置布局

使用自动布局在屏幕更改时调整自定义单元格中的 UIButton 字体

如何在标准 UITableViewCell 中以编程方式自动布局右侧的自定义 UIButton。