使用自动布局 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的主要内容,如果未能解决你的问题,请参考以下文章
stackView swift中uibutton问题的自动布局/宽度