# 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
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
教育部认可的大学生竞赛备赛资料代码,源码,竞赛总结,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通 全国电子设计大赛、全国大学生智能汽车竞赛、蓝桥杯、集成电路创新创业大赛、光电设计竞赛、挑战杯、大创项目、互联网+、三创赛、计算机设计竞赛、创新创业大赛、ACM-ICPC国际大学生程序设计竞赛、全国大学生数学建模竞赛、全国大学生电子商务“创新、创意及创业”挑战赛、全国大学生节能减排社会实践与科技竞赛、全国大学生工程训练综合能力竞赛、全国大学生机器人大赛-RoboMaster、RoboCon、“西门子杯”中国智能制造挑战赛、中国大学生计算机设计大赛、世界技能大赛、中国高校计算机大赛-大数据挑战赛、团体程序设计天梯赛、移动应用创新赛、网络技术挑战赛、全国大学生信息安全竞赛、“中国软件杯”大学生软件设计大赛、全国大学生光电设计竞赛、中国机器人及人工智能大赛、“大唐杯”全国大学生移动通信5G技术大赛、华为ICT大赛、全国大学生嵌入式芯片与系统设计竞赛、中国高校智能机器人创意大赛
资源推荐
资源详情
资源评论
收起资源包目录
竞赛资料源码-中国高校计算机大赛-移动应用创新赛三等奖.zip (758个子文件)
.gitignore 97B
GCDAsyncSocket.h 59KB
GCDAsyncUdpSocket.h 46KB
AFURLSessionManager.h 30KB
AFURLRequestSerialization.h 22KB
AFHTTPSessionManager.h 20KB
SDWebImageManager.h 14KB
AFURLResponseSerialization.h 12KB
NSButton+WebCache.h 12KB
UIButton+WebCache.h 11KB
SVProgressHUD.h 11KB
SDImageCache.h 11KB
SDWebImageDownloader.h 10KB
UIButton+AFNetworking.h 10KB
AFImageDownloader.h 9KB
UIImageView+WebCache.h 9KB
AFNetworkReachabilityManager.h 8KB
MASConstraint.h 8KB
MOBFHttpService.h 7KB
UIView+WebCache.h 7KB
AFAutoPurgingImageCache.h 6KB
MASUtilities.h 6KB
UIImageView+AFNetworking.h 6KB
AFSecurityPolicy.h 6KB
MASConstraintMaker.h 6KB
AFNetworkActivityIndicatorManager.h 5KB
SRWebSocket.h 5KB
View+MASAdditions.h 5KB
SDWebImageDownloaderOperation.h 5KB
View+MASShorthandAdditions.h 5KB
SDWebImageTransition.h 5KB
UIWebView+AFNetworking.h 4KB
UIImageView+HighlightedWebCache.h 4KB
SDWebImagePrefetcher.h 4KB
SDWebImageCoder.h 4KB
MOBFData.h 4KB
MOBFDevice.h 3KB
SDImageCacheConfig.h 3KB
MOBFRegex.h 3KB
SMSSDK.h 3KB
NSArray+MASAdditions.h 3KB
SDWebImageCompat.h 3KB
UIProgressView+AFNetworking.h 2KB
MOBFUser.h 2KB
SDWebImageCoderHelper.h 2KB
MOBFDate.h 2KB
MOBFString.h 2KB
MOBFImage.h 2KB
SDWebImageCodersManager.h 2KB
MobSDK.h 2KB
MOBFOAuthService.h 2KB
IMOBFDataModel.h 2KB
MOBFLogService.h 2KB
SMSSDKAddressBook.h 2KB
UIRefreshControl+AFNetworking.h 2KB
User.h 2KB
UIActivityIndicatorView+AFNetworking.h 2KB
MOBFMedia.h 2KB
YZWord.h 2KB
MASConstraint+Private.h 2KB
UIKit+AFNetworking.h 2KB
MOBFDataService.h 2KB
UIImage+MultiFormat.h 2KB
AFNetworking.h 2KB
AFCompatibilityMacros.h 2KB
MOBFJSContext.h 2KB
MOBFTCPClient.h 1KB
MOBFImageGetter.h 1KB
MOBFTagService.h 1KB
MOBFHttpPostedFile.h 1KB
MOBFJson.h 1KB
UIView+WebCacheOperation.h 1KB
UIImage+AFNetworking.h 1KB
MOBFPluginManager.h 1KB
MASViewConstraint.h 1KB
SMSSDKResultHandlerDef.h 1KB
SDWebImageImageIOCoder.h 1KB
MASViewAttribute.h 1KB
NSData+ImageContentType.h 1KB
SDWebImageFrame.h 1KB
MOBFRSAHelper.h 1KB
MOBFApplication.h 1KB
ZKGameBattleView.h 1KB
SMSSDK+ContactFriends.h 1KB
MOBFNetworkFlowInfo.h 1KB
MainView.h 1KB
NSArray+MASShorthandAdditions.h 1016B
SDWebImageGIFCoder.h 1015B
MOBFNotificationCenter.h 1008B
YZLoginView.h 975B
MOBFoundation.h 961B
YZNavigationBar.h 920B
MOBFUDPClient.h 919B
ViewController+MASAdditions.h 891B
WebSocketManager.h 881B
MeView.h 829B
Masonry.h 802B
SDAnimatedImageRep.h 793B
YZWordDetailView.h 781B
YZDetailView.h 774B
共 758 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功