ios - 以编程方式快速更改纵横比约束
问题描述
我们有一个带有 aUIButton
和UIView
foo的 MainStoryBoard有 4 个约束:
- foo 顶部到 superView 顶部
- foo 导致 superView 领先
- foo 尾随到 superView 尾随
- 富纵横比 16:9
按钮的期望行为应该是它改变了 foo 约束,因此 foo 将扩展到全屏,如果再次按下它应该具有之前的纵横比 16:9。
我尝试按照IBOutlet
以下步骤使用约束来执行此操作:
- 展开:
- 从 foo 中删除 aspectRatio 约束
- 将 foo 底部约束添加到 superView 底部
- 崩溃时:
- 删除 foo 底部约束到 superView 底部
- 将 aspectRatio 约束添加到 foo
我也玩过高度,什么都没有。提前致谢。
解决方案
您的初始约束应如下所示。
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()
}
推荐阅读
- javascript - 来自 Video 元素的 drawImage 行为不正常,并且分辨率混乱
- python - 如何完全卸载 Anaconda 及其软件包?
- java - JavaFX在按钮单击时设置表格视图的表格行工厂
- python - Python - 我新创建的类实例丢失了
- javascript - 可迭代的 Promises,对每个 Promise 进行评估
- operating-system - IBM大型机如何读取PSW(程序状态字)中的数据
- javascript - 链接异步函数无法正常工作
- django - Django,下载文件后默认文件图标丢失
- r - 加速行星生成并避免 R 中的 for 循环
- javascript - 无法访问嵌套对象属性