# Masonry [![Build Status](https://travis-ci.org/SnapKit/Masonry.svg?branch=master)](https://travis-ci.org/SnapKit/Masonry) [![Coverage Status](https://img.shields.io/coveralls/SnapKit/Masonry.svg?style=flat-square)](https://coveralls.io/r/SnapKit/Masonry) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![Pod Version](https://img.shields.io/cocoapods/v/Masonry.svg?style=flat)
**Masonry is still actively maintained, we are committed to fixing bugs and merging good quality PRs from the wider community. However if you're using Swift in your project, we recommend using [SnapKit](https://github.com/SnapKit/SnapKit) as it provides better type safety with a simpler API.**
Masonry is a light-weight layout framework which wraps AutoLayout with a nicer syntax. Masonry has its own layout DSL which provides a chainable way of describing your NSLayoutConstraints which results in layout code that is more concise and readable.
Masonry supports iOS and Mac OS X.
For examples take a look at the **Masonry iOS Examples** project in the Masonry workspace. You will need to run `pod install` after downloading.
## What's wrong with NSLayoutConstraints?
Under the hood Auto Layout is a powerful and flexible way of organising and laying out your views. However creating constraints from code is verbose and not very descriptive.
Imagine a simple example in which you want to have a view fill its superview but inset by 10 pixels on every side
```obj-c
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],
]];
```
Even with such a simple example the code needed is quite verbose and quickly becomes unreadable when you have more than 2 or 3 views.
Another option is to use Visual Format Language (VFL), which is a bit less long winded.
However the ASCII type syntax has its own pitfalls and its also a bit harder to animate as `NSLayoutConstraint constraintsWithVisualFormat:` returns an array.
## Prepare to meet your Maker!
Heres the same constraints created using MASConstraintMaker
```obj-c
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);
}];
```
Or even shorter
```obj-c
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(superview).with.insets(padding);
}];
```
Also note in the first example we had to add the constraints to the superview `[superview addConstraints:...`.
Masonry however will automagically add constraints to the appropriate view.
Masonry will also call `view1.translatesAutoresizingMaskIntoConstraints = NO;` for you.
## Not all things are created equal
> `.equalTo` equivalent to **NSLayoutRelationEqual**
> `.lessThanOrEqualTo` equivalent to **NSLayoutRelationLessThanOrEqual**
> `.greaterThanOrEqualTo` equivalent to **NSLayoutRelationGreaterThanOrEqual**
These three equality constraints accept one argument which can be any of the following:
#### 1. MASViewAttribute
```obj-c
make.centerX.lessThanOrEqualTo(view2.mas_left);
```
MASViewAttribute | NSLayoutAttribute
------------------------- | --------------------------
view.mas_left | NSLayoutAttributeLeft
view.mas_right | NSLayoutAttributeRight
view.mas_top | NSLayoutAttributeTop
view.mas_bottom | NSLayoutAttributeBottom
view.mas_leading | NSLayoutAttributeLeading
view.mas_trailing | NSLayoutAttributeTrailing
view.mas_width | NSLayoutAttributeWidth
view.mas_height | NSLayoutAttributeHeight
view.mas_centerX | NSLayoutAttributeCenterX
view.mas_centerY | NSLayoutAttributeCenterY
view.mas_baseline | NSLayoutAttributeBaseline
#### 2. UIView/NSView
if you want view.left to be greater than or equal to label.left :
```obj-c
//these two constraints are exactly the same
make.left.greaterThanOrEqualTo(label);
make.left.greaterThanOrEqualTo(label.mas_left);
```
#### 3. NSNumber
Auto Layout allows width and height to be set to constant values.
if you want to set view to have a minimum and maximum width you could pass a number to the equality blocks:
```obj-c
//width >= 200 && width <= 400
make.width.greaterThanOrEqualTo(@200);
make.width.lessThanOrEqualTo(@400)
```
However Auto Layout does not allow alignment attributes such as left, right, centerY etc to be set to constant values.
So if you pass a NSNumber for these attributes Masonry will turn these into constraints relative to the view’s superview ie:
```obj-c
//creates view.left = view.superview.left + 10
make.left.lessThanOrEqualTo(@10)
```
Instead of using NSNumber, you can use primitives and structs to build your constraints, like so:
```obj-c
make.top.mas_equalTo(42);
make.height.mas_equalTo(20);
make.size.mas_equalTo(CGSizeMake(50, 100));
make.edges.mas_equalTo(UIEdgeInsetsMake(10, 0, 10, 0));
make.left.mas_equalTo(view).mas_offset(UIEdgeInsetsMake(10, 0, 10, 0));
```
By default, macros which support [autoboxing](https://en.wikipedia.org/wiki/Autoboxing#Autoboxing) are prefixed with `mas_`. Unprefixed versions are available by defining `MAS_SHORTHAND_GLOBALS` before importing Masonry.
#### 4. NSArray
An array of a mixture of any of the previous types
```obj-c
make.height.equalTo(@[view1.mas_height, view2.mas_height]);
make.height.equalTo(@[view1, view2]);
make.left.equalTo(@[view1, @100, view3.right]);
````
## Learn to prioritize
> `.priority` allows you to specify an exact priority
> `.priorityHigh` equivalent to **UILayoutPriorityDefaultHigh**
> `.priorityMedium` is half way between high and low
> `.priorityLow` equivalent to **UILayoutPriorityDefaultLow**
Priorities are can be tacked on to the end of a constraint chain like so:
```obj-c
make.left.greaterThanO
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
特斯拉组件_TeslaPage.zip (316个子文件)
NSString+YYAdd.h 12KB
UIImage+YYAdd.h 12KB
UIColor+YYAdd.h 12KB
NSObject+YYAdd.h 12KB
YYCGUtilities.h 11KB
YYCategoriesMacro.h 10KB
UITableView+YYAdd.h 8KB
MASConstraint.h 8KB
NSData+YYAdd.h 7KB
NSDate+YYAdd.h 7KB
NSDictionary+YYAdd.h 6KB
MASUtilities.h 6KB
UIDevice+YYAdd.h 6KB
MASConstraintMaker.h 6KB
NSArray+YYAdd.h 5KB
View+MASAdditions.h 5KB
View+MASShorthandAdditions.h 5KB
UIFont+YYAdd.h 4KB
UIView+YYAdd.h 4KB
NSBundle+YYAdd.h 4KB
NSNotificationCenter+YYAdd.h 3KB
CALayer+YYAdd.h 3KB
NSArray+MASAdditions.h 3KB
YYCategories.h 3KB
UIControl+YYAdd.h 3KB
NSTimer+YYAdd.h 3KB
UIApplication+YYAdd.h 2KB
MASConstraint+Private.h 2KB
CXLPageProtocols.h 2KB
NSObject+YYAddForKVO.h 2KB
UIScreen+YYAdd.h 2KB
NSKeyedUnarchiver+YYAdd.h 1KB
MASViewConstraint.h 1KB
CXLTarBar.h 1KB
UIGestureRecognizer+YYAdd.h 1KB
MASViewAttribute.h 1KB
UIScrollView+YYAdd.h 1KB
NSArray+MASShorthandAdditions.h 1016B
UIBezierPath+YYAdd.h 975B
ViewController+MASAdditions.h 891B
CXLPageController.h 862B
UIBarButtonItem+YYAdd.h 806B
Masonry.h 802B
CXLTabBarController.h 789B
NSNumber+YYAdd.h 776B
NSThread+YYAdd.h 719B
CXLPageContentView.h 692B
UIButton+Aliment.h 682B
NSObject+YYAddForARC.h 662B
UITextField+YYAdd.h 649B
MASLayoutConstraint.h 505B
MASCompositeConstraint.h 494B
WeiBoCustomNavigationView.h 435B
CXLCoverProtocol.h 380B
CXLCoverController.h 354B
CXLSubListController.h 346B
NSLayoutConstraint+MASDebugAdditions.h 326B
AppDelegate.h 282B
CXLTarItermView.h 262B
CXLMainController.h 257B
WeiBoHeaderView.h 230B
NSNotificationCenter+YYAdd.h 74B
NSNotificationCenter+YYAdd.h 74B
NSKeyedUnarchiver+YYAdd.h 71B
NSKeyedUnarchiver+YYAdd.h 71B
UIGestureRecognizer+YYAdd.h 68B
NSObject+YYAddForKVO.h 68B
NSObject+YYAddForARC.h 68B
UIGestureRecognizer+YYAdd.h 68B
NSObject+YYAddForKVO.h 68B
NSObject+YYAddForARC.h 68B
NSDictionary+YYAdd.h 66B
NSDictionary+YYAdd.h 66B
UIBarButtonItem+YYAdd.h 64B
UIBarButtonItem+YYAdd.h 64B
NSLayoutConstraint+MASDebugAdditions.h 63B
NSLayoutConstraint+MASDebugAdditions.h 63B
NSBundle+YYAdd.h 62B
NSString+YYAdd.h 62B
NSObject+YYAdd.h 62B
NSNumber+YYAdd.h 62B
NSThread+YYAdd.h 62B
UIApplication+YYAdd.h 62B
NSBundle+YYAdd.h 62B
NSString+YYAdd.h 62B
NSObject+YYAdd.h 62B
NSNumber+YYAdd.h 62B
NSThread+YYAdd.h 62B
UIApplication+YYAdd.h 62B
NSArray+YYAdd.h 61B
NSTimer+YYAdd.h 61B
UIScrollView+YYAdd.h 61B
UIBezierPath+YYAdd.h 61B
NSArray+YYAdd.h 61B
NSTimer+YYAdd.h 61B
UIScrollView+YYAdd.h 61B
UIBezierPath+YYAdd.h 61B
NSData+YYAdd.h 60B
UITableView+YYAdd.h 60B
UITextField+YYAdd.h 60B
共 316 条
- 1
- 2
- 3
- 4
资源评论
好家伙VCC
- 粉丝: 2145
- 资源: 9145
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 控制学智能控制-模糊PID控制器与C语言实现
- G2绘制 雷达图及保姆级注解
- DirectX 1-7 包装器项目,用于使旧游戏在新硬件上运行.zip
- DirectX + MFC 对话框基础 + VS2015.zip
- DirectMusic 的不完整重新实现,这是 Microsoft 为作为 Direct3D 和 DirectX 一部分提供的游戏提供的自适应音轨 API.zip
- Python基于SEIR传染病模型和MCMC马尔可夫链蒙特卡洛算法的疫苗接种场景模拟仿真源码
- DirectFB 和 DirectX 上的 GUI 库.zip
- DirectComposition 与 DirectX 12 互操作性的演示.zip
- proteus安装及使用9PDF
- 现场总线协议(modbus、canopen和profibus dp)源码驱动
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功