PureLayout 是 iOS & OS X Auto Layout 的终极 API——非常简单,又非常强大。PureLayout 通过一个全面的Auto Layout API 扩展了 UIView/NSView, NSArray 和 NSLayoutConstraint,仿照苹果自身的框架, 构建了一个全面的自动布局 API, 这样你再也不用为适配而苦恼啦!!!

添加PureLayout到你的工程里面

  • 用CocoaPods安装(podilfe中加pod 'PureLayout')/GitHub下载PureLayout, 手动添加到你的项目中
  • 导入头文件#import <PureLayout/PureLayout.h> /  #import "PureLayout.h"

我们就这个布局来简单说一下

首先新建几个 View

1
2
3
4
5
@property (nonatomic, strong) UIView *blueView;
@property (nonatomic, strong) UIView *redView;
@property (nonatomic, strong) UIView *yellowView;
@property (nonatomic, strong) UIView *greenView;
@property (nonatomic, assign) BOOL didSetupConstraints; // 判断是否存在约束条件

然后在加载试图

1
2
3
4
5
6
7
8
9
10
11
- (void)loadView
{
self.view = [UIView new];
self.view.backgroundColor = [UIColor colorWithWhite:0.1 alpha:1.0]; [self.view addSubview:self.blueView];
[self.view addSubview:self.redView];
[self.view addSubview:self.yellowView];
[self.view addSubview:self.greenView];
[self.view setNeedsUpdateConstraints]; // 设置新的约束天剑
}

如果没有试图,那么就重新创建一个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
- (UIView *)blueView
{
if (!_blueView) {
_blueView = [UIView newAutoLayoutView];
_blueView.backgroundColor = [UIColor blueColor];
}
return _blueView;
} - (UIView *)redView
{
if (!_redView) {
_redView = [UIView newAutoLayoutView];
_redView.backgroundColor = [UIColor redColor];
}
return _redView;
} - (UIView *)yellowView
{
if (!_yellowView) {
_yellowView = [UIView newAutoLayoutView];
_yellowView.backgroundColor = [UIColor yellowColor];
}
return _yellowView;
} - (UIView *)greenView
{
if (!_greenView) {
_greenView = [UIView newAutoLayoutView];
_greenView.backgroundColor = [UIColor greenColor];
}
return _greenView;
}

然后再添加试图的约束条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
- (void)updateViewConstraints   //更新约束条件
{
// 如果没有自动约束条件
if (!self.didSetupConstraints) {
// Blue view is centered on screen,(Centers the view in its superview.) with size {50 pt, 50 pt} //设置蓝色的 view 在父试图的中心,
[self.blueView autoCenterInSuperview];
//设置蓝色的 view 的宽和高(50.0 50.0)
[self.blueView autoSetDimensionsToSize:CGSizeMake(50.0, 50.0)]; // Red view is positioned at the bottom right corner of the blue view, with the same width, and a height of 40 pt
// 设置红色 view 的顶部是蓝色 view 的底部
[self.redView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:self.blueView];
//设置红色 view 的左边是蓝色 view 的右边
[self.redView autoPinEdge:ALEdgeLeft toEdge:ALEdgeRight ofView:self.blueView];
//设置红色 view 的宽度就是蓝色 view 的宽度
[self.redView autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:self.blueView];
//设置红色 view 的高度为40.0
[self.redView autoSetDimension:ALDimensionHeight toSize:40.0]; // Yellow view is positioned 10 pt below the red view, extending across the screen with 20 pt insets from the edges,
// and with a fixed height of 25 pt
//设置黄色 veiw 的顶部距离红色 view 距离为10.0
[self.yellowView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:self.redView withOffset:10.0];
//设置黄色 view 的高度为25.0
[self.yellowView autoSetDimension:ALDimensionHeight toSize:25.0];
//设置黄色 view 距离父试图左边的距离为20.0
[self.yellowView autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:20.0];
//设置黄色 view 距离父试图右边的距离为20.0
[self.yellowView autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:20.0]; // Green view is positioned 10 pt below the yellow view, aligned to the vertical axis of its superview,
// with its height twice the height of the yellow view and its width fixed to 150 pt
//设置绿色 view 的顶部距离黄色 view 的底部距离为10.0
[self.greenView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:self.yellowView withOffset:10.0];
//设置绿色 view 相对父试图竖向居中
[self.greenView autoAlignAxisToSuperviewAxis:ALAxisVertical];
//设置绿色的 view 的高度是黄色 view 高度的2.0倍
[self.greenView autoMatchDimension:ALDimensionHeight toDimension:ALDimensionHeight ofView:self.yellowView withMultiplier:2.0];
//设置绿色 view 的宽度为150.0
[self.greenView autoSetDimension:ALDimensionWidth toSize:150.0]; //设置已经添加过约束了
self.didSetupConstraints = YES;
} [super updateViewConstraints];
}

github 地址:https://github.com/smileyborg/PureLayout#

PureLayout的更多相关文章

  1. PureLayout和Masonry比较

    一年前那时我做iOS开发,为了自动布局适配多种屏幕,我一般使用Masonry,后来偶然地在一个视频教程中发现老师使用了UIView+Autolayout(现在作者改名为PureLayout)自动布局, ...

  2. iOS PureLayout使用

    PureLayout是iOS Auto Layout的终端API,强大而简单.由UIView.NSArray和NSLayoutConstraint类别组成.PureLayout为大多数Auto Lay ...

  3. PureLayout,使用纯代码写AutoLayout

    为iOS和OS X的自动布局最终的API -- 令人印象深刻的简单,非常强大. PureLayout延伸的UIView /NSView , NSArray,和NSLayoutConstraint与之后 ...

  4. PureLayout(轻量级自动布局)

    直接整理用法 1.设置高度宽度 [view1 autoSetDimension:ALDimensionHeight toSize:70.0]; [view1 autoSetDimension:ALDi ...

  5. 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

    本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...

  6. 【转】GitHub 排名前 100 的安卓、iOS项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  7. GitHub iOS-Top 100 简介

    GitHub排名前100的iOS第三方汇总简介,方便开发者选择适合的第三方框架. 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, ...

  8. iOS 开源项目

    在 Github 上 Star 太多了,有时候很难找到自己想要的开源库,所以在此记录下来.便于自己开发使用,也顺便分享给大家. 动画 awesome-ios-animation收集了iOS平台下比较主 ...

  9. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

    下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...

随机推荐

  1. kali客户端攻击

    浏览器攻击 browser_autpwn2 (BAP2) mkdir /test 为接受响应的服务器创建目录   use auxiliary/server/browser_autopwn2  set ...

  2. Python学习笔记——基础篇【第六周】——Subprocess模块

    执行系统命令 可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 com ...

  3. 子查询 此处该用AND 而不是 WHERE

    条件:有一张账户表,一张订单表. 需求:求出所有role = 2 即客服人员,所有操作成功的订单数量.结果:能查出所有的客服人员名称,以及操作的订单数量(关键点在于,没有操作过订单,则数量显示为0) ...

  4. 笔记本开临时Wifi

    笔记本开临时热点 1. netsh wlan set hostednetwork mode=allow ssid=xianzhonPC key=123456782. 打开共享和网络—更改适配器设置—本 ...

  5. ubuntu开放防火墙端口

    root@jbxue:$ sudo ufw enable  Firewall started and enabled on system startup  root@jbxue:$ sudo ufw ...

  6. sql server 2008 R2 压缩备份数据库

    今天需要把一个省外项目的数据库从服务器上备份.拷贝到本机(跨地域传输数据库备份文件). 连上VPN,通过远程桌面连接,连接上服务器,发现数据库文件已经有20G以上大小了. 文件太大,公司网络也不稳定, ...

  7. Cron表达式的详细用法

    字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN- ...

  8. Busy Beavers(暴力模拟)

    由于排版问题,题目无法显示,可以到 http://7xjob4.com1.z0.glb.clouddn.com/e4872a15819b6bf9d1e5250bacc2a30b  查看 题目大意是有只 ...

  9. java基础之操作符

    一:赋值 1.对基本数据类型的赋值,int a=b:   //把b的值复制给a,如果修改了a的值,b 的值不会受到影响. 2.对引用类型的赋值, public class Text { public ...

  10. windows 7 & protobuf 3.0 & python 3.5

    置顶: 在Python中使用protocol buffers参考指南 http://blog.csdn.net/losophy/article/details/17006573 其实看这篇文章就可以把 ...