Swift 以编程方式更改纵横比约束
Swift change aspect ratio constraint programmatically
我们有一个带有 UIButton
的 MainStoryBoard 和一个带有 4 个约束的 UIView
foo:
- foo top 到 superView top
- foo 领先 superView 领先
- foo 尾随 superView 尾随
- foo 纵横比 16:9
按钮的预期行为应该是它更改 foo 约束,因此 foo 将扩展到全屏,如果再次按下它应该具有以前的宽高比,16:9。
我尝试按照以下步骤使用约束的 IBOutlet
执行此操作:
- 展开时:
- 从 foo 中删除 aspectRatio 约束
- 为 superView 底部添加一个 foo 底部约束
- 崩溃时:
- 移除 foo 底部约束到 superView 底部
- 向 foo 添加 aspectRatio 约束
我也玩过高空,没玩过。提前致谢。
您的初始约束应如下所示。
NSLayoutConstraint.activate([
foo.leadingAnchor.constraint(equalTo: superView.leadingAnchor),
foo.trailingAnchor.constraint(equalTo: superView.trailingAnchor),
foo.topAnchor.constraint(equalTo: superView.topAnchor)
])
let collapsedConstraint = foo.heightAnchor.constraint(equalTo: foo.widthAnchor, multiplier: 9/16)
let expandedConstraint = foo.bottomAnchor.constraint(equalTo: superView.bottomAnchor)
collapsedConstraint.isActive = collapsed
expandedConstraint.isActive = !collapsed
触发的方法应该像这样改变约束。
@objc func tapAction() {
collapsedConstraint.isActive = collapsed
expandedConstraint.isActive = !collapsed
superView.layoutIfNeeded()
}
我们有一个带有 UIButton
的 MainStoryBoard 和一个带有 4 个约束的 UIView
foo:
- foo top 到 superView top
- foo 领先 superView 领先
- foo 尾随 superView 尾随
- foo 纵横比 16:9
按钮的预期行为应该是它更改 foo 约束,因此 foo 将扩展到全屏,如果再次按下它应该具有以前的宽高比,16:9。
我尝试按照以下步骤使用约束的 IBOutlet
执行此操作:
- 展开时:
- 从 foo 中删除 aspectRatio 约束
- 为 superView 底部添加一个 foo 底部约束
- 崩溃时:
- 移除 foo 底部约束到 superView 底部
- 向 foo 添加 aspectRatio 约束
我也玩过高空,没玩过。提前致谢。
您的初始约束应如下所示。
NSLayoutConstraint.activate([
foo.leadingAnchor.constraint(equalTo: superView.leadingAnchor),
foo.trailingAnchor.constraint(equalTo: superView.trailingAnchor),
foo.topAnchor.constraint(equalTo: superView.topAnchor)
])
let collapsedConstraint = foo.heightAnchor.constraint(equalTo: foo.widthAnchor, multiplier: 9/16)
let expandedConstraint = foo.bottomAnchor.constraint(equalTo: superView.bottomAnchor)
collapsedConstraint.isActive = collapsed
expandedConstraint.isActive = !collapsed
触发的方法应该像这样改变约束。
@objc func tapAction() {
collapsedConstraint.isActive = collapsed
expandedConstraint.isActive = !collapsed
superView.layoutIfNeeded()
}