# 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之弹窗 - Swift4.2/Objective-C版本(Swift、Objective-C版本别分实现了不同的功能!
共473个文件
swift:118个
png:87个
h:44个
需积分: 1 0 下载量 77 浏览量
2023-06-21
21:35:25
上传
评论
收藏 13.45MB ZIP 举报
温馨提示
## 使用说明: ```注意 1、弹窗基类分别使用了OC和Swift来实现,同时OC和Swift版本分别实现了几个不同的弹窗效果; 2、Objective-C类需要继承弹窗基类时必须选择该库的Objective-C版本中的基类; 3、两个库可以同时存在一个项目中,建议两个库同时使用。 ``` ## 温馨提示: ```温馨提示 1、同一窗口内目前只支持弹窗一个弹窗,如果需要同时展示两个弹窗,建议与系统或者其他自定义弹窗配合使用; 2、如需两个弹窗接连使用,请保证第一个弹窗完全消失再调用第二个弹窗; 3、鉴于方法或者属性可能跟着版本改动,因此强烈建议使用该库时封装一层后再使用; 4、如需在弹窗上展示SVProgressHUD,可设置:[SVProgressHUD setMaxSupportedWindowLevel:UIWindowLevelStatusBar+1]; ``` ## 支持pod导入: ```cocoaPods use_frameworks! pod 'FWPopupView' 注意: 1、如出现 [!] Unable to find a specifica
资源推荐
资源详情
资源评论
收起资源包目录
IOS之弹窗 - Swift4.2/Objective-C版本(Swift、Objective-C版本别分实现了不同的功能! (473个子文件)
config 314B
description 73B
exclude 250B
FETCH_HEAD 347B
Custom.gif 2MB
Menu.gif 1.55MB
SVProgressHUD.h 11KB
FWPopupBaseView.h 10KB
MASConstraint.h 8KB
MASUtilities.h 6KB
MASConstraintMaker.h 6KB
View+MASAdditions.h 5KB
View+MASShorthandAdditions.h 5KB
NSArray+MASAdditions.h 3KB
FWGuideMaskView.h 2KB
FWPopupWindow.h 2KB
MASConstraint+Private.h 2KB
MASViewConstraint.h 1KB
MASViewAttribute.h 1KB
NSArray+MASShorthandAdditions.h 1016B
UIView+PopupView.h 987B
ViewController+MASAdditions.h 891B
Masonry.h 802B
Masonry-umbrella.h 801B
MASLayoutConstraint.h 505B
MASCompositeConstraint.h 494B
FWPopupViewOC-umbrella.h 490B
FWPanPopupView.h 459B
SVProgressAnimatedView.h 450B
SVProgressHUD-umbrella.h 450B
UIColor+FWEx.h 432B
SVIndefiniteAnimatedView.h 407B
FWNavigationController.h 365B
IQKeyboardManagerSwift-umbrella.h 336B
FWDemoViewController.h 334B
Pods-FWPopupView_OC-umbrella.h 330B
NSLayoutConstraint+MASDebugAdditions.h 326B
Pods-FWPopupView-umbrella.h 324B
FWPopupView-umbrella.h 314B
SnapKit-umbrella.h 306B
SnapKit-umbrella.h 306B
SVRadialGradientLayer.h 303B
AppDelegate.h 274B
FWPopupRootController.h 269B
FWCustomDemoVC.h 240B
FWMenuViewDemoVC.h 214B
FWCustomView.h 208B
FWPopupView_OC-Bridging-Header.h 104B
IQKeyboardManagerSwift-umbrella.h 86B
SnapKit-umbrella.h 56B
HEAD 182B
HEAD 182B
HEAD 32B
HEAD 23B
pack-84d964e7e8cb76d16e66c5098b23f9fbc2f6744c.idx 77KB
index 67KB
Contents.json 2KB
Contents.json 2KB
Contents.json 925B
Contents.json 925B
Contents.json 923B
Contents.json 923B
Contents.json 923B
Contents.json 923B
Contents.json 921B
Contents.json 921B
Contents.json 917B
Contents.json 917B
Contents.json 909B
Contents.json 909B
Contents.json 695B
Contents.json 381B
Contents.json 380B
Contents.json 364B
Contents.json 364B
Contents.json 327B
Contents.json 327B
Contents.json 326B
Contents.json 326B
Contents.json 326B
Contents.json 326B
Contents.json 325B
Contents.json 325B
Contents.json 323B
Contents.json 323B
Contents.json 319B
Contents.json 319B
Contents.json 317B
Contents.json 317B
Contents.json 308B
Contents.json 308B
Contents.json 63B
Contents.json 63B
Contents.json 62B
LICENSE 1KB
LICENSE 1KB
LICENSE 1KB
LICENSE 1KB
LICENSE 1KB
Manifest.lock 732B
共 473 条
- 1
- 2
- 3
- 4
- 5
资源评论
小菜的OnePiece
- 粉丝: 105
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功