【问题标题】:iOS - Change the multiplier of constraint by Swift [duplicate]iOS - 通过 Swift 更改约束乘数 [重复]
【发布时间】:2016-05-18 08:46:24
【问题描述】:

如何使用 Swift 更改约束的乘数。

someConstraint.multiplier = 0.6 // error: 'multiplier' is get-only property

我想知道如何更改代码中的乘数 (Swift)。

【问题讨论】:

标签: ios swift


【解决方案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 属性会自动在正确的视图中添加和删除约束。”
猜你喜欢
  • 2017-12-07
  • 2021-09-21
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
相关资源
最近更新 更多