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平台上使用简单动态布局约束处理能力
Swift4.+ version 👉 WHC_Layout
修改ios11安全布局机制增加whc_IsSafe控制api
布局api内部自动支持兼容处理iphonex头部齐刘海和底部黑线
添加UILayoutGuide,safeAreaLayoutGuide约束支持
添加抗拉伸和抗压缩api支持链式调用
UILayoutGuide * guide = UILayoutGuide.new;
UIView * view = UIView.new;
guide.whc_LeftSpace(10)
.whc_TopSpaceToView(0, self.view.safeAreaLayoutGuide)
.whc_RightSpace(10)
.whc_Height(30);
view.whc_LeftSpace(10)
.whc_RightSpace(10)
.whc_TopSpaceToView(0, guide)
.whc_Height(50);
view.whc_LeftSpace(10)
.whc_TopSpace(10)
.whc_RightSpace(10)
.whc_HeightAuto();
view.whc_Width(100).whc_LessOrEqual()
.whc_Width(20).whc_GreaterOrEqual()
[view mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(superview.mas_top).with.offset(10);
make.left.equalTo(superview.mas_left).with.offset(20);
make.bottom.equalTo(superview.mas_bottom).with.offset(-10);
make.right.equalTo(superview.mas_right).with.offset(-10);
}];
Modify the view to the left from 20 other views
view.whc_LeftSpace(20);
// or
view.whc_LeftSpaceToView(20,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_RemoveLayoutAttrs(NSLayoutAttributeLeading)
.whc_LeftSpace(10);
Remove all constraints associated with view left
view.whc_RemoveLayoutAttrs(NSLayoutAttributeLeft);
To remove multiple constraints associated with view
view.whc_RemoveLayoutAttrs(NSLayoutAttributeLeft,NSLayoutAttributeLeading,NSLayoutAttributeTop);
// or
view.whc_RemoveTo(linkView, attrs: NSLayoutAttributeLeft ...);
Modify the view constraint for low priority right
view.whc_RightSpace(10)
.whc_PriorityLow();
// The higher the priority, the less likely to be stretched
// 设置抗拉伸优先级,优先级越高越不容易被拉伸
label.whc_ContentHuggingPriority(UILayoutPriorityDefaultLow, UILayoutConstraintAxisHorizontal);
// 设置抗压缩优先级,优先级越高越不容易被压缩
// Compression priority, the higher the priority the less easy to be compressed
label.whc_ContentCompressionResistancePriority(UILayoutPriorityDefaultLow, UILayoutConstraintAxisHorizontal);
No reuse way calculated cell height
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [UITableViewCell whc_CellHeightForIndexPath:indexPath tableView:tableView];
}
Reuse way calculated cell height
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [UITableViewCell whc_CellHeightForIndexPath:indexPath
tableView:tableView
identifier:@"kFirendsCircleCellIdentifier"
layoutBlock:^(UITableViewCell *cell) {
/// use model layout cell
[(FriendsCircleCell *)cell setFriendModel:_friendModelArray[indexPath.row]];
}];
}
Create WHC_StackView
WHC_StackView * stackView = [WHC_StackView new];
[self.view addSubview: stackView];
Add constraint
stackView.whc_LeftSpace(10)
.whc_TopSpace(10)
.whc_RightSpace(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 (int i = 0; i < 4; i++) {
UIView * view = [UIView new];
[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.