MasonryMasonry
指南
  • Objective-C API
  • Swift API
示例
更新日志
  • English
  • 简体中文
GitHub
指南
  • Objective-C API
  • Swift API
示例
更新日志
  • English
  • 简体中文
GitHub
  • 指南

    • 快速开始
    • 安装指南
    • 基础用法

基础用法

本指南涵盖 Masonry 的核心 API,包括创建、更新和管理 Auto Layout 约束。

创建约束

使用 mas_makeConstraints: 为视图创建约束:

::: code-group

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

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(superview.mas_top).with.offset(padding.top);
    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);
}];
let padding = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)

view.mas.makeConstraints { make in
    make.top.equalTo(superview.mas.top).offset(padding.top)
    make.left.equalTo(superview.mas.left).offset(padding.left)
    make.bottom.equalTo(superview.mas.bottom).offset(-padding.bottom)
    make.right.equalTo(superview.mas.right).offset(-padding.right)
}

:::

或者使用 edges 更简洁地表达:

::: code-group

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

:::

等式关系

Masonry 提供三种关系方法:

方法NSLayoutRelation
.equalToNSLayoutRelationEqual
.lessThanOrEqualToNSLayoutRelationLessThanOrEqual
.greaterThanOrEqualToNSLayoutRelationGreaterThanOrEqual

属性链

链式调用多个属性:

// 设置 left、right、bottom 等于 superview,top 等于另一个视图
make.left.right.and.bottom.equalTo(superview);
make.top.equalTo(otherView);

优先级

设置约束优先级:

::: code-group

make.left.greaterThanOrEqualTo(label.mas_left).with.priorityLow();
make.top.equalTo(label.mas_top).with.priority(600);
view.mas.makeConstraints { make in
    make.width <= 200 ~ .defaultHigh
    make.height == 44 ~ 600
}

:::

更新约束

更新已有约束(不存在则创建):

::: code-group

[view1 mas_updateConstraints:^(MASConstraintMaker *make) {
    make.leading.equalTo(superview).offset(newPadding);
}];
view.mas.updateConstraints { make in
    make.leading.equalTo(superview).offset(newPadding)
}

:::

重建约束

移除所有已有约束并重新创建:

::: code-group

[view1 mas_remakeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(superview).insets(newPadding);
}];
view.mas.remakeConstraints { make in
    make.edges.equalTo(superview).inset(newPadding)
}

:::

Swift 运算符

MasonrySwift 模块支持基于运算符的约束创建:

view.mas.makeConstraints { make in
    make.top == superview.mas.top + 20
    make.left >= superview.mas.left + 16
    make.width <= 200
    make.height == 44 ~ .defaultHigh  // 设置优先级
}

调试

mas_equalTo()、mas_greaterThanOrEqualTo()、mas_lessThanOrEqualTo()、mas_equalToSuperview()、mas_greaterThanOrEqualToSuperview() 和 mas_lessThanOrEqualToSuperview() 等宏会自动将调用处的文件名和行号嵌入到约束的 mas_key 中:

// mas_key 自动设置为 "<文件名>:<行号>"
make.top.mas_equalTo(superview.mas_top).offset(20);
make.left.right.bottom.mas_equalToSuperview();

// 也可以手动添加 key
make.top.equalTo(superview.mas_top).offset(20).key(@"topPin");

// 批量标记视图
MASAttachKeys(titleLabel, avatarView);
在 GitHub 上编辑此页
上次更新: 2026/3/30 02:11
贡献者: samzhjiang
Prev
安装指南