#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)
**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.greaterThanOrEqualTo(label.mas_left).with.priorityLow();
make.top.equalTo(label.mas_to
没有合适的资源?快使用搜索试试~ 我知道了~
MKMapView 同时显示多气泡
共190个文件
h:62个
m:55个
png:26个
2星 需积分: 13 122 下载量 67 浏览量
2016-12-09
09:18:12
上传
评论
收藏 1.3MB ZIP 举报
温馨提示
自定义 callout! 通过手势 添加多个气泡
资源推荐
资源详情
资源评论
收起资源包目录
MKMapView 同时显示多气泡 (190个子文件)
.DS_Store 10KB
.DS_Store 10KB
.DS_Store 8KB
.DS_Store 8KB
.DS_Store 6KB
.DS_Store 6KB
AFURLSessionManager.h 29KB
AFURLRequestSerialization.h 22KB
AFHTTPSessionManager.h 19KB
MBProgressHUD.h 17KB
AFURLResponseSerialization.h 12KB
UIButton+AFNetworking.h 10KB
SMCalloutView.h 9KB
AFImageDownloader.h 9KB
AFNetworkReachabilityManager.h 8KB
MASConstraint.h 7KB
MASUtilities.h 6KB
UIImageView+AFNetworking.h 6KB
AFSecurityPolicy.h 6KB
AFAutoPurgingImageCache.h 6KB
AFNetworkActivityIndicatorManager.h 5KB
MASConstraintMaker.h 5KB
UIWebView+AFNetworking.h 4KB
View+MASAdditions.h 4KB
View+MASShorthandAdditions.h 3KB
NSArray+MASAdditions.h 3KB
UIProgressView+AFNetworking.h 2KB
UIRefreshControl+AFNetworking.h 2KB
UIActivityIndicatorView+AFNetworking.h 2KB
DelegateViewModel.h 2KB
AxisViewLine.h 2KB
MASConstraint+Private.h 2KB
UIKit+AFNetworking.h 2KB
AFNetworking.h 2KB
AxisView.h 1KB
UIImage+AFNetworking.h 1KB
NSString+WYJStringChange.h 1KB
MASViewConstraint.h 1KB
MASViewAttribute.h 1KB
SMClassicCalloutView.h 1KB
BaseViewModel.h 1KB
NSArray+MASShorthandAdditions.h 1016B
Storage_DataModel.h 951B
BarView.h 923B
ViewController+MASAdditions.h 891B
Masonry.h 802B
Annotation_Storage.h 774B
Constant.h 748B
Storage_LOC_LAT_Model.h 661B
BSLoginView.h 621B
RequestManager.h 566B
UIView+WYJFrame.h 512B
MASLayoutConstraint.h 505B
MASCompositeConstraint.h 494B
BaseRootViewController.h 493B
NSDictionary+WYJDictionaryChange.h 485B
BaseViewController.h 402B
ZhuZhuangTuDataTools.h 394B
MapViewController.h 387B
colorModel.h 382B
UIColor+helper.h 372B
AFHTTPSessionManager+WYJSettingManager.h 347B
NSLayoutConstraint+MASDebugAdditions.h 326B
BarChartView.h 322B
AppDelegate.h 273B
ZhuzhuangtuViewController.h 231B
ViewController.h 211B
BaseDataModel.h 208B
背景pic.jpg 215KB
Contents.json 1KB
Contents.json 322B
Contents.json 321B
Contents.json 313B
Contents.json 312B
Contents.json 311B
Contents.json 310B
Contents.json 310B
Contents.json 310B
Contents.json 309B
Contents.json 306B
Contents.json 306B
Contents.json 305B
Contents.json 305B
Contents.json 302B
Contents.json 62B
Contents.json 62B
LICENSE 1KB
LICENSE 1KB
LICENSE 1KB
SMClassicCalloutView.m 66KB
AFURLSessionManager.m 54KB
AFURLRequestSerialization.m 50KB
SMCalloutView.m 38KB
MBProgressHUD.m 33KB
AFURLResponseSerialization.m 26KB
MapViewController.m 20KB
BSLoginView.m 17KB
AFImageDownloader.m 17KB
AFHTTPSessionManager.m 15KB
MASViewConstraint.m 13KB
共 190 条
- 1
- 2
iOSYangming
- 粉丝: 34
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页