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而不是removeConstraintaddConstraint方法。 API 说“在为 iOS 8.0 或更高版本开发时,将约束的 isActive 属性设置为 true,而不是直接调用 addConstraint(_:) 方法。isActive 属性会自动在正确的视图中添加和删除约束。”

以上是关于iOS - 通过 Swift 更改约束乘数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用两个不同的乘数更改单个高度约束的乘数

使用乘数的 Swift 约束与尾随但不领先

根据尺寸等级更改约束的乘数

如何在 iOS 8 中更改 NSLayoutConstraint 的“乘数”属性的值

如何在 SnapKit 中设置 heightAnchor 的乘数 - swift

更改约束以在 swift iOS 中扩展视图