Swift中UIView同时设置可变高度与固定高度的约束调整方法
修改说明
你需要对原有代码做两处核心调整:
- 替换底部两个视图的高度约束:将原来的相对父视图高度占比约束
heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.5)改为固定高度约束heightAnchor.constraint(equalToConstant: 200),满足底部固定200高度的需求。 - 调整顶部两个视图的高度规则:删除原有相对父视图高度占比的约束,新增底部锚点绑定到底部视图的顶部锚点,顶部区域会自动填充父视图减去底部固定高度后的剩余空间,自动适配不同设备尺寸和横竖屏切换。
修改后完整可运行代码如下:
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 先创建底部两个固定高度视图 let frameBottomLeft = UIView() frameBottomLeft.backgroundColor = .systemGreen view.addSubview(frameBottomLeft) frameBottomLeft.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ frameBottomLeft.bottomAnchor.constraint(equalTo: view.bottomAnchor), frameBottomLeft.heightAnchor.constraint(equalToConstant: 200), frameBottomLeft.leftAnchor.constraint(equalTo: view.leftAnchor), frameBottomLeft.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5) ]) let frameBottomRight = UIView() frameBottomRight.backgroundColor = .systemYellow view.addSubview(frameBottomRight) frameBottomRight.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ frameBottomRight.bottomAnchor.constraint(equalTo: view.bottomAnchor), frameBottomRight.heightAnchor.constraint(equalToConstant: 200), frameBottomRight.rightAnchor.constraint(equalTo: view.rightAnchor), frameBottomRight.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5) ]) // 再创建顶部两个自适应高度视图 let frameTopLeft = UIView() frameTopLeft.backgroundColor = .systemRed view.addSubview(frameTopLeft) frameTopLeft.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ frameTopLeft.topAnchor.constraint(equalTo: view.topAnchor), frameTopLeft.bottomAnchor.constraint(equalTo: frameBottomLeft.topAnchor), frameTopLeft.leftAnchor.constraint(equalTo: view.leftAnchor), frameTopLeft.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5) ]) let frameTopRight = UIView() frameTopRight.backgroundColor = .systemBlue view.addSubview(frameTopRight) frameTopRight.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ frameTopRight.topAnchor.constraint(equalTo: view.topAnchor), frameTopRight.bottomAnchor.constraint(equalTo: frameBottomRight.topAnchor), frameTopRight.rightAnchor.constraint(equalTo: view.rightAnchor), frameTopRight.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 0.5) ]) } }
内容的提问来源于stack exchange,提问作者user4806509
相关产品推荐
相关产品推荐

