【问题标题】:How to change aspectRatio of IBOutlet for a view programmatically?如何以编程方式更改视图的 IBOutlet 的 aspectRatio?
【发布时间】:2020-07-30 18:46:44
【问题描述】:

好的,这是我的限制。

视图对齐 centerX 和 centerY 并且前导、尾随、顶部和底部为 >= 0。
它还具有 aspectRatio 的另一个约束。
现在我已经创建了 aspectRation 约束的@IBOutlet

@IBOutlet weak var contentViewAspectRatio: NSLayoutConstraint!

问题是我不知道如何以编程方式更改 aspectRatio。

if value {
    //Change aspect ratio to 16/9
} else {
    //Change aspect ratio to 19.5/9
}

我们将不胜感激。

【问题讨论】:

  • 您可以使用您的 2 个值创建 2 个约束,并根据 value 激活/停用它们。将一个优先级设置为低于另一个,否则您将在 InterfaceBuilder 中发生冲突 请参阅stackoverflow.com/questions/30773182/…,但您无法更改乘数。

标签: ios swift xcode


【解决方案1】:

更改纵横比意味着更改只读约束的乘数,因此您需要停用该约束并使用新的乘数创建一个新的 1

let newCon = contentViewAspectRatio.addConstraintWithMul(0.3)
parentViewOfConstraint.removeConstraint(contentViewAspectRatio)
parentViewOfConstraint.addConstraint(newCon)
view.layoutIfNeeded()
contentViewAspectRatio = newCon

extension NSLayoutConstraint {
    func addConstraintWithMul(_ 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)
    }
}

另一种选择是创建具有 2 个不同方面的 2 个约束,并使用它们的活动/优先级状态,以防你有有限且知道的方面数量

【讨论】:

  • 稍后选项似乎有效,会通知您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多