重新限制 UIButton 的宽度
Posted
技术标签:
【中文标题】重新限制 UIButton 的宽度【英文标题】:Reconstrain width of a UIButton 【发布时间】:2016-09-30 21:49:11 【问题描述】:我正在以编程方式使用自动布局约束,我想根据按钮更改的标题重置按钮的宽度。假设我没有参考在其上设置的旧宽度约束,我该如何重新约束它的宽度?在我看来,创建新的宽度约束不起作用——我需要停用旧的,然后激活新的。但我没有提到旧的。
// adding a new constraint
myButton.widthAnchor.constraintEqualToConstant(myNewWidth).active = true
【问题讨论】:
你为什么不参考旧的宽度约束?默认情况下,按钮宽度会拥抱它的内容,所以也许你甚至根本不需要宽度约束。设置水平中心,也许是最大宽度 我正在尝试编写一个重新约束参数的通用方法,在本例中为 UIButton。查询锚点上的所有约束会很好。 【参考方案1】:在你的类中创建一个 NSLayoutConstraint 属性。当您以编程方式设置按钮的宽度约束时,请为此属性分配新约束。
那么当你需要更新约束时就这样做
myWidthConstraint.constant = newValue
【讨论】:
我同意保留对约束的引用很有用,但最好查询宽度锚的约束,例如。【参考方案2】:你可以试试这个。我还没试过。首先,您需要过滤一堆约束或全部循环并找到所需的约束。为此,您可以使用它。
var constraint: NSLayoutConstraint! = nil
let constraints = myButton.constraintsAffectingLayoutForAxis(UILayoutConstraintAxis.Horizontal)
否则这将得到你所有的限制。
var constraint: NSLayoutConstraint! = nil
然后你需要遍历它们,像这样找到需要的。
for const in myButton.constraints
if const.firstAttribute == NSLayoutAttribute.Width
constraint = const
break
宽度约束的第一个属性始终设置为“宽度”,您也可以使用 if 子句对应用约束的项目进行如下额外检查
const.firstItem as! NSObject == myButton
因为宽度约束的第一项就是它本身。 尝试是否有效。如果你找到它,我建议删除特定约束并添加新约束。在下面的项目上添加宽度约束是代码。假设你想要的宽度是 50 px。
myButton.addConstraint(NSLayoutConstraint(item: myButton, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 50.0))
这是正确的方法。不要激活或停用它。
【讨论】:
以上是关于重新限制 UIButton 的宽度的主要内容,如果未能解决你的问题,请参考以下文章