Masonry(Github)文档翻译

Masonry是一个轻量级的iOS和macOS布局框架,提供了简洁的链式语法进行AutoLayout操作。本文介绍了Masonry的基本用法,包括创建约束、设置优先级、更新和移除约束,以及如何处理布局问题。同时,展示了如何通过CocoaPods安装和使用Masonry,以及它的主要特点。
摘要由CSDN通过智能技术生成

Masonry以更漂亮的语法封装了AutoLayout,是一个轻量级的布局框架。
Masonry有自己的布局DSL(domain-specific language),提供了一种链式写法来描述NSLayoutConstraints,这使得布局代码变得更加简洁和可读。
Masonry 支持 iOS 和 macOS。


NSLayoutConstraints怎么了?

在底层AutoLayout是一种很强大灵活的用于管理和布局视图的方式。但用代码创建约束(Constraints)显得非常冗长且不易描述。设想这样的简单场景:在父视图中填放一个子视图,且每一边留下10像素的边距。

UIView *superview = self.view;

UIView *view1 = [[UIView alloc] init];
view1.translatesAutoresizingMaskIntoConstraints = NO;
view1.backgroundColor = [UIColor greenColor];
[superview addSubview:view1];

UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);
[superview addConstraints:@[
//view1 constraints
[NSLayoutConstraint constraintWithItem:view1
                             attribute:NSLayoutAttributeTop
                             relatedBy:NSLayoutRelationEqual
                                toItem:superview
                             attribute:NSLayoutAttributeTop
                            multiplier:1.0
                              constant:padding.top],

[NSLayoutConstraint constraintWithItem:view1
                             attribute:NSLayoutAttributeLeft
                             relatedBy:NSLayoutRelationEqual
                                toItem:superview
                             attribute:NSLayoutAttributeLeft
                            multiplier:1.0
                              constant:padding.left],

[NSLayoutConstraint constraintWithItem:view1
                             attribute:NSLayoutAttributeBottom
                             relatedBy:NSLayoutRelationEqual
                                toItem:superview
                             attribute:NSLayoutAttributeBottom
                            multiplier:1.0
                              constant:-padding.bottom],

[NSLayoutConstraint constraintWithItem:view1
                             attribute:NSLayoutAttributeRight
                             relatedBy:NSLayoutRelationEqual
                                toItem:superview
                             attribute:NSLayoutAttributeRight
                            multiplier:1
                              constant:-padding.right],

 ]];

即使这样简单的一个例子,代码就变得这么冗长,如果再多两三个视图,就立刻变得可读性很差。
另外一个选择是使用VFL,稍微不那么长和绕。但是ASKII类型的语法有它自己的隐患,并且动画很麻烦因为NSLayoutConstraint constraintsWithVisualFormat:返回的是一个数组。


准备好见你的Maker!

以下是用MASConstraintMaker创建的简单约束:

    UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);

    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.equalTo(superview.mas_top).with.offset(padding.top);
        //with is an optional semantic filler
        make.left.equalTo(superview.mas_left).with.offset(padding.left);
        make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);
        make.right.equalTo(superview.mas_right).with.offset(-padding.right);
    }];

还可以更短:

 [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
      make.edges.equalTo(superview).with.insets(padding);
}];

不过需要注意在第一个例子中我们需要把约束添加到superview中,尽管Masonry会自动添加约束到合适的view中。
Masonry也会自动调用

view1.translatesAutoresizidngMaskIntoConstraints &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值