iOS - 通过 Swift 更改约束乘数 [重复]
Posted
技术标签:
【中文标题】iOS - 通过 Swift 更改约束乘数 [重复]【英文标题】:iOS - Change the multiplier of constraint by Swift [duplicate] 【发布时间】:2016-05-18 08:46:24 【问题描述】:如何使用 Swift 更改约束的乘数。
someConstraint.multiplier = 0.6 // error: 'multiplier' is get-only property
我想知道如何更改代码中的乘数 (Swift)。
【问题讨论】:
使用不同的乘数创建多个约束,并在正确的时间激活/停用正确的约束。 ***.com/questions/19593641/… 你可以这样做:someConstraint.constant *= 0.6 【参考方案1】:由于multiplier
是只读属性并且您无法更改它,因此您需要将约束替换为其修改后的克隆。
您可以使用扩展程序来执行此操作,如下所示:
斯威夫特 4/5:
extension NSLayoutConstraint
func constraintWithMultiplier(_ multiplier: CGFloat) -> NSLayoutConstraint
return NSLayoutConstraint(item: self.firstItem!, attribute: self.firstAttribute, relatedBy: self.relation, toItem: self.secondItem, attribute: self.secondAttribute, multiplier: multiplier, constant: self.constant)
用法:
let newConstraint = constraintToChange.constraintWithMultiplier(0.75)
view.removeConstraint(constraintToChange)
view.addConstraint(newConstraint)
view.layoutIfNeeded()
constraintToChange = newConstraint
【讨论】:
非常感谢您的回复!我试着做你的代码。但我无法实现我想要的,因为self.view!
。在我的情况下,我修复了self.view!
。但是我在现有的“我可以更改 NSLayoutConstraint 的乘数属性吗?”中使用了 Andrew Schreiber 先生的方式。它确实运作良好。我需要更多地搜索它。
当您将逻辑语句作为参数放置时,您是如何编译的? addConstraint(self.constraintToChange = newConstraint)
?
swift4.2中应用崩溃
It is crashing - "'无法在视图上安装约束。约束是否引用了视图子树之外的东西?这是非法的。"
另外,对于ios 8或更高版本,最好使用constraint.isActive = true/false
而不是removeConstraint
和addConstraint
方法。 API 说“在为 iOS 8.0 或更高版本开发时,将约束的 isActive 属性设置为 true,而不是直接调用 addConstraint(_:) 方法。isActive 属性会自动在正确的视图中添加和删除约束。”以上是关于iOS - 通过 Swift 更改约束乘数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 8 中更改 NSLayoutConstraint 的“乘数”属性的值