Swift iOS and Mac OS X platforms currently in use the fastest the simplest development to build the UI layout automatically open source library, strong dynamic layout constraint handling capacity,iOS/Mac OS X平台上目前使用最简单开发构建UI速度最快的自动布局开源库,强悍的动态布局约束处理能力
Objective-c version 👉 WHC_AutoLayout
布局api内部自动支持兼容处理iphonex头部齐刘海和底部黑线
添加UILayoutGuide,safeAreaLayoutGuide约束支持
重构布局核心升级基于二叉树层遍历算法搜索约束主视图,对于自动处理跨视图层复杂约束关系更健壮从容
封装集成抗拉伸和抗压缩api支持链式调用
let guide = UILayoutGuide()
let view = UIView()
guide.whc_Left(10)
.whc_Top(0, toView: self.view.safeAreaLayoutGuide)
.whc_Right(10)
.whc_Height(30)
view.whc_Left(10)
.whc_Right(10)
.whc_Top(0, toView: guide)
.whc_Height(50)
view.whc_Left(10)
.whc_Top(10)
.whc_Right(10)
.whc_HeightAuto()
view.whc_Width(100).whc_LessOrEqual()
.whc_Width(20).whc_GreaterOrEqual()
view.snp.updateConstraints {(make) -> Void in
make.top.equalTo(superview.snp_top).with.offset(10)
make.left.equalTo(superview.snp_left).with.offset(20)
make.bottom.equalTo(superview.snp_bottom).with.offset(-10)
make.right.equalTo(superview.snp_right).with.offset(-10)
}
Modify the view to the left from 20 other views
view.whc_Left(20)
// or
view.whc_Left(20, toView: otherView)
If the view of xib leading now amended as left constraints
/// First remove the xib view of leading and then add new constraints
view.whc_RemoveAttrs(.leading)
.whc_Left(10)
Remove all constraints associated with view left
view.whc_RemoveAttrs(.left)
To remove multiple constraints associated with view
view.whc_RemoveAttrs(.left, .leading, .top)
// or
view.whc_RemoveTo(linkView, attrs: .left ...)
Modify the view constraint for low priority right
view.whc_Right(10)
.whc_PriorityLow()
// The higher the priority, the less likely to be stretched
// 设置抗拉伸优先级,优先级越高越不容易被拉伸
label.whc_ContentHuggingPriority(.defaultLow, for: .horizontal)
// 设置抗压缩优先级,优先级越高越不容易被压缩
// Compression priority, the higher the priority the less easy to be compressed
label.whc_ContentCompressionResistancePriority(.defaultLow, for: .horizontal)
No reuse way calculated cell height
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewCell.whc_CellHeightForIndexPath(indexPath, tableView: tableView)
}
Reuse way calculated cell height
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewCell.whc_CellHeightForIndexPath(indexPath,
tableView: tableView,
identifier: "kFirendsCircleCellIdentifier",
layoutBlock: { (cell) in
/// use model layout cell
cell.setFriendModel(model)
})
}
Create WHC_StackView
let stackView = WHC_StackView()
self.view.addSubview(stackView)
Add constraint
stackView.whc_Left(10)
.whc_Top(10)
.whc_Right(10)
.whc_HeightAuto()
Configuration stackView
1. Set the padding
stackView.whc_Edge = UIEdgeInsetsMake(10, 10, 10, 10) // 内边距
2. Set the layout direction
stackView.whc_Orientation = .Vertical // 自动垂直布局
3. Set the child views lateral clearance
stackView.whc_HSpace = 10 // 子视图横向间隙
4. Set the child views vertical clearance
stackView.whc_VSpace = 10 // 子视图垂直间隙
5. Add subview and start the layout
for _ in 0 ... 3 {
let view = UIView()
stackView.addSubview(view)
}
stackView.whc_StartLayout()
For more UI layout automatically, WHC_StackView components, one line of code to calculate the cell height module, please download this demo to check the specific usage
All source code is licensed under the MIT License.