# 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
没有合适的资源?快使用搜索试试~ 我知道了~
嵌套式布局页面 - iOS.zip_ios_onceqeu_桌面
共105个文件
h:55个
m:23个
xcconfig:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 101 浏览量
2022-09-23
20:20:36
上传
评论
收藏 158KB ZIP 举报
温馨提示
OBject c 语言开发的嵌套式布局页面,可应用在iphone,ipad
资源推荐
资源详情
资源评论
收起资源包目录
嵌套式布局页面 - iOS.zip_ios_onceqeu_桌面 (105个子文件)
.gitignore 1KB
MASConstraint.h 8KB
MASUtilities.h 6KB
MASConstraintMaker.h 6KB
View+MASAdditions.h 5KB
View+MASShorthandAdditions.h 5KB
NSArray+MASAdditions.h 3KB
MASConstraint+Private.h 2KB
MASViewConstraint.h 1KB
MASViewAttribute.h 1KB
NSArray+MASShorthandAdditions.h 1016B
ViewController+MASAdditions.h 891B
Masonry.h 802B
ContentTableViewCell.h 767B
ImageTableViewCell.h 675B
MASLayoutConstraint.h 505B
MASCompositeConstraint.h 494B
HeaderView.h 398B
NSLayoutConstraint+MASDebugAdditions.h 326B
ImageCollectionViewCell.h 288B
UIView+Extension.h 278B
AppDelegate.h 275B
SectionHeaderView.h 259B
IntroduceTableViewController.h 244B
StrategyTableViewController.h 242B
ViewController.h 211B
NSLayoutConstraint+MASDebugAdditions.h 63B
NSLayoutConstraint+MASDebugAdditions.h 63B
NSArray+MASShorthandAdditions.h 56B
NSArray+MASShorthandAdditions.h 56B
ViewController+MASAdditions.h 54B
ViewController+MASAdditions.h 54B
View+MASShorthandAdditions.h 53B
View+MASShorthandAdditions.h 53B
MASCompositeConstraint.h 49B
MASCompositeConstraint.h 49B
MASConstraint+Private.h 48B
MASConstraint+Private.h 48B
NSArray+MASAdditions.h 47B
NSArray+MASAdditions.h 47B
MASLayoutConstraint.h 46B
MASLayoutConstraint.h 46B
MASConstraintMaker.h 45B
MASConstraintMaker.h 45B
View+MASAdditions.h 44B
MASViewConstraint.h 44B
View+MASAdditions.h 44B
MASViewConstraint.h 44B
MASViewAttribute.h 43B
MASViewAttribute.h 43B
MASConstraint.h 40B
MASConstraint.h 40B
MASUtilities.h 39B
MASUtilities.h 39B
Masonry.h 34B
Masonry.h 34B
Contents.json 2KB
Contents.json 306B
Contents.json 62B
LICENSE 1KB
LICENSE 1KB
Podfile.lock 200B
Manifest.lock 200B
MASViewConstraint.m 13KB
MASConstraintMaker.m 10KB
MASConstraint.m 8KB
IntroduceTableViewController.m 7KB
View+MASAdditions.m 6KB
ViewController.m 6KB
NSArray+MASAdditions.m 6KB
NSLayoutConstraint+MASDebugAdditions.m 6KB
MASCompositeConstraint.m 5KB
ContentTableViewCell.m 4KB
HeaderView.m 3KB
AppDelegate.m 2KB
ImageTableViewCell.m 2KB
StrategyTableViewController.m 2KB
ViewController+MASAdditions.m 1KB
MASViewAttribute.m 1KB
SectionHeaderView.m 760B
ImageCollectionViewCell.m 539B
UIView+Extension.m 480B
main.m 332B
MASLayoutConstraint.m 227B
Pods-NestedPage-dummy.m 134B
Masonry-dummy.m 118B
Pods-NestedPage-acknowledgements.markdown 1KB
README.md 16KB
README.md 99B
project.pbxproj 34KB
project.pbxproj 22KB
PrefixHeader.pch 549B
Masonry-prefix.pch 195B
Pods-NestedPage-acknowledgements.plist 2KB
Info.plist 1KB
fake_game.png 73KB
Podfile 60B
Pods-NestedPage-resources.sh 5KB
Pods-NestedPage-frameworks.sh 4KB
LaunchScreen.storyboard 2KB
共 105 条
- 1
- 2
资源评论
weixin_42651887
- 粉丝: 79
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于opencv的dnn模块实现Yolo-Fastest的目标检测python源码+模型+说明(高分项目).zip
- 使用Python调用微信本地ocr服务.zip
- 【精品推荐】人工智能在医疗中的应用.pptx
- 【精品推荐】电子医疗仪器人机接口-(1).ppt
- 【精品推荐】电子医疗仪器人机接口.ppt
- ubuntu镜像ubuntu镜像01
- 基于paddle搭建神经网络实现5种水果识别分类python源码+数据集(高分毕设).zip
- 【精品推荐】电子商务网店类型介绍.ppt
- 基于paddle搭建神经网络实现水果识别分类python源码+数据集(高分项目).zip
- 三菱plc编程口通信学习笔记.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功