# 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
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
iOSDesignPatternDemosVC.zip (89个子文件)
iOSDesignPatternDemosVC
.DS_Store 6KB
Podfile 277B
iOSDesignPatternDemosVC.xcworkspace
xcshareddata
swiftpm
configuration
IDEWorkspaceChecks.plist 238B
contents.xcworkspacedata 241B
xcuserdata
zhangchengcai.xcuserdatad
UserInterfaceState.xcuserstate 60KB
iOSDesignPatternDemosVC.xcodeproj
project.pbxproj 24KB
xcuserdata
zhangchengcai.xcuserdatad
xcschemes
xcschememanagement.plist 358B
project.xcworkspace
xcshareddata
swiftpm
configuration
IDEWorkspaceChecks.plist 238B
contents.xcworkspacedata 135B
xcuserdata
zhangchengcai.xcuserdatad
UserInterfaceState.xcuserstate 46KB
iOSDesignPatternDemosVC
MVC
.DS_Store 6KB
controllers
MVCViewController.h 465B
MVCViewController.m 2KB
models
NewsModel.h 259B
ShopModel.m 206B
ShopModel.h 259B
NewsModel.m 206B
MVCModel.m 409B
MVCModel.h 452B
views
MVCTableViewCell.h 459B
MVCTableViewCell.m 3KB
DesignPatternDemosVC.h 467B
SceneDelegate.m 2KB
Base.lproj
Main.storyboard 6KB
LaunchScreen.storyboard 2KB
AppDelegate.h 195B
AppDelegate.m 1KB
main.m 459B
SceneDelegate.h 248B
MVCModelSwitchViewController.h 308B
MVCModelSwitchViewController.m 3KB
DesignPatternDemosVC.m 2KB
Info.plist 681B
Assets.xcassets
Contents.json 63B
AppIcon.appiconset
Contents.json 177B
AccentColor.colorset
Contents.json 123B
Pods
Pods.xcodeproj
project.pbxproj 41KB
xcuserdata
zhangchengcai.xcuserdatad
xcschemes
Masonry.xcscheme 2KB
Pods-iOSDesignPatternDemosVC.xcscheme 2KB
xcschememanagement.plist 567B
Manifest.lock 237B
Local Podspecs
Headers
Target Support Files
Pods-iOSDesignPatternDemosVC
Pods-iOSDesignPatternDemosVC-frameworks.sh 8KB
Pods-iOSDesignPatternDemosVC-frameworks-Release-input-files.xcfilelist 153B
Pods-iOSDesignPatternDemosVC.modulemap 146B
Pods-iOSDesignPatternDemosVC-acknowledgements.markdown 1KB
Pods-iOSDesignPatternDemosVC.release.xcconfig 803B
Pods-iOSDesignPatternDemosVC-dummy.m 160B
Pods-iOSDesignPatternDemosVC-frameworks-Debug-output-files.xcfilelist 63B
Pods-iOSDesignPatternDemosVC-acknowledgements.plist 2KB
Pods-iOSDesignPatternDemosVC-frameworks-Debug-input-files.xcfilelist 153B
Pods-iOSDesignPatternDemosVC-umbrella.h 348B
Pods-iOSDesignPatternDemosVC-Info.plist 854B
Pods-iOSDesignPatternDemosVC.debug.xcconfig 803B
Pods-iOSDesignPatternDemosVC-frameworks-Release-output-files.xcfilelist 63B
Masonry
Masonry.debug.xcconfig 718B
Masonry.modulemap 104B
Masonry.release.xcconfig 718B
Masonry-Info.plist 854B
Masonry-umbrella.h 801B
Masonry-dummy.m 118B
Masonry-prefix.pch 195B
Masonry
LICENSE 1KB
README.md 16KB
Masonry
MASConstraint.h 8KB
MASViewAttribute.h 1KB
NSLayoutConstraint+MASDebugAdditions.h 326B
MASConstraintMaker.h 6KB
Masonry.h 802B
NSArray+MASAdditions.m 6KB
MASLayoutConstraint.m 227B
NSLayoutConstraint+MASDebugAdditions.m 6KB
MASConstraint+Private.h 2KB
MASConstraint.m 8KB
ViewController+MASAdditions.h 891B
MASCompositeConstraint.m 5KB
View+MASShorthandAdditions.h 5KB
NSArray+MASShorthandAdditions.h 1016B
MASViewConstraint.m 13KB
View+MASAdditions.h 5KB
MASUtilities.h 6KB
MASViewAttribute.m 1KB
MASConstraintMaker.m 10KB
NSArray+MASAdditions.h 3KB
MASLayoutConstraint.h 505B
View+MASAdditions.m 6KB
MASViewConstraint.h 1KB
MASCompositeConstraint.h 494B
ViewController+MASAdditions.m 1KB
Podfile.lock 237B
共 89 条
- 1
资源评论
我叫柱子哥
- 粉丝: 313
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- kernel-ml-6.8.8-1.el7.elrepo.x86-64.rpm
- Labview基本框架之状态机
- HM2309B-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Git安全实践:保护你的代码仓库个人学习笔记.md
- 自动驾驶定位系列教程九:后端优化.pdf
- 三国志5威力加强版-windows
- HM2309A-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- HM2306-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Git进阶技巧:提升团队协作效率个人学习笔记.md
- 自动驾驶定位系列教程八:建图系统结构优化.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功