Swift中SnapKit框架的约束布局实践
import UIKit
import SnapKit
class ViewController: UIViewController {
lazy var view1 = UIView()
override func viewDidLoad() {
super.viewDidLoad()
view1.backgroundColor = .black
view.addSubview(view1)
view1.snp.makeConstraints { make in
// 通过四个约束参数定义视图的位置与尺寸
make.width.equalTo(100)
make.height.equalTo(150)
make.top.equalTo(10)
make.centerX.equalToSuperview()
}
}
override func updateViewConstraints() {
view1.snp.updateConstraints { make in
// 动态调整顶部约束值
make.top.equalTo(300)
}
super.updateViewConstraints()
}
}
func updateConstraintsDemo() {
view1.snp.remakeConstraints { make in
make.size.equalTo(20)
make.top.equalTo(300)
}
print("SnapKit约束变更检测")
}
class ViewController: UIViewController {
lazy var view2 = UIView()
override func viewDidLoad() {
super.viewDidLoad()
view2.backgroundColor = .red
view.addSubview(view2)
view2.snp.makeConstraints { make in
// 宽度占父视图1/2,高度占父视图1/3
make.width.equalToSuperview().dividedBy(2)
make.height.equalToSuperview().dividedBy(3)
make.center.equalToSuperview()
}
}
}
coverView.snp.makeConstraints { make in
make.top.equalTo(15.0)
make.left.right.equalToSuperview()
make.height.equalTo(coverView.snp.width).multipliedBy(210.0 / 168.0)
}
class ViewController: UIViewController {
lazy var safeAreaView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
safeAreaView.backgroundColor = .magenta
view.addSubview(safeAreaView)
safeAreaView.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
make.left.right.equalToSuperview()
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
}
}
}
安全区域布局特性说明:
- iPhone X之前:安全区域顶部距离窗口顶部为状态栏高度(20dp)
- iPhone X及更新设备:安全区域顶部距离窗口顶部为导航栏高度(44dp)
- iPhone X之前:安全区域底部与窗口底部对齐
- iPhone X及更新设备:安全区域底部距离窗口底部34dp