AutoLayout--PureLayout

之前写过两篇文章:iOS: 在代码中使用Autolayout (1) – 按比例缩放和优先级iOS: 在代码中使用Autolayout (2) – intrinsicContentSize和Content Hugging Priority讲述在iOS中使用代码来写Autolayout,读者可以看到,用代码写Autolayout是比较枯燥且容易出错的。当然也有很多代替方法,比如苹果官方的Visual Format Language,还有一些重量级的工程比如Masonry,这里介绍一个轻量的,支持iOS和OS X的工程PureLayout,之所以轻量是因为PureLayout没有再加入一套自己的语法,而是以Category的形式辅助苹果已有的NSLayoutConstraint那套东西,体积小,写起来更底层同时也不乏可读性。

比如上文中的简单的两个黄色方块的程序,用PureLayout写更快捷。

首先,把PureLayout源代码加入到工程中,或者用CocoaPods安装(podilfe中加pod ‘PureLayout‘)。

然后加一个创建View的辅助函数:

- (UIView*)createView {    //有Autolayout不需要设置frame    UIView *view = [UIView new];    view.backgroundColor = [UIColor yellowColor];    //不允许AutoresizingMask转换成Autolayout, PureLayout内部也会帮你设置的。    view.translatesAutoresizingMaskIntoConstraints = NO;

    return view;}

viewDidLoad中创建两个View,然后用PureLayout的方式加入Autolayout中的Constaint就可以了,代码非常好理解:

//创建两个ViewUIView *view1 = [self createView];UIView *view2 = [self createView];

//addSubview[self.view addSubview:view1];[self.view addSubview:view2];

//设置view1高度为70[view1 autoSetDimension:ALDimensionHeight toSize:70.0];

//view1和view2都都距离父view边距为20ALEdgeInsets defInsets = ALEdgeInsetsMake(20.0, 20.0, 20.0, 20.0);[view1 autoPinEdgesToSuperviewEdgesWithInsets:defInsets excludingEdge:ALEdgeBottom];[view2 autoPinEdgesToSuperviewEdgesWithInsets:defInsets excludingEdge:ALEdgeTop];

//两个view之间距离也是20[view2 autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:view1 withOffset:defInsets.bottom];

运行结果和上文一样:

原文地址:http://www.mgenware.com/blog/?p=2335

文/Ray_win(简书作者)
原文链接:http://www.jianshu.com/p/2bebe9ef24fd
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-25 03:41:04

AutoLayout--PureLayout的相关文章

AutoLayout深入浅出五[UITableView动态高度]

本文转载至 http://grayluo.github.io//WeiFocusIo/autolayout/2015/02/01/autolayout5/ 我们经常会遇到UITableViewCell的高度要跟随内容而调整,在未引入AutoLayout之前,我们使用以下方法计算Label高度,然后heightForRowAtIndexPath中返回计算的高度,这种做法,真的很土很局限很不好,如果UILabel使用了CoreText或者UIKit进行了富文本不同字体的排版,它更是没办法,我还得分段

PureLayout和Masonry比较

一年前那时我做iOS开发,为了自动布局适配多种屏幕,我一般使用Masonry,后来偶然地在一个视频教程中发现老师使用了UIView+Autolayout(现在作者改名为PureLayout)自动布局,发现PureLayout的自动布局方式更符合OC开发者的习惯,使用起来更简单直观.此后我做项目或者带团队做项目一般都优先使用PureLayout.最新加入一个团队,他们依然在使用Masonry,不可否认,在苹果推出NSAutoLayoutContrant初期,Masonry给开发者带来了极大的便利,

AutoLayout技术选型和应用

前言:这篇文章是笔者在项目中对布局技术进行技术选型和应用的相关介绍,供大家参考. Question1:什么是autoLayout? Answer1: autolayout是苹果从iOS6开始推出的旨在优化.简化UI布局相关工作的新框架,其理念是抽象出约束的概念,将其作用于view,而不再需要手动设置其frame. 个人理解其中的分别就好像面向对象编程和面向过程编程之间的分别:能够体会面向对象编程的好处,我们也不难领会autolayout带来的变化:我们唯一需要处理的,就是约束.其后的一切工作,苹

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

本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并且能够保持平滑滚动的? 这个问题得到了300+的支持和450+的收藏,答案得到了730+的支持,很详细的说明了如何在iOS7和iOS8上实现UITableView的动态行高功能,并且这个答案对实现UICollectionView的动态行高也具有参考意义.所以在这里将这个答案翻译了一下,希望对大家有所帮助

使用Autolayout实现UITableView的Cell动态布局

如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并且能够保持平滑滚动的? 这个问题得到了300+的支持和450+的收藏,答案得到了730+的支持,很详细的说明了如何在iOS7和iOS8上实现UITableView的动态行高功能,并且这个答案对实现UICollectionView的动态行高也具有参考意义.所以在这里将这个答案翻译了一下,希望对大家有所帮助.以下是答案的全文翻译: 答案略长,如果你不喜欢细读,可以直接看这两个示例的代码: iOS

如何解决IOS 动画中 Autolayout 与View Transforms的冲突

IOS 的动画放大与缩小,并非按照找它的中心点放大和缩小,而是左上角 .我分析了下原来是Autolayout 与View Transforms的冲突造成的. - (void) addSubviewWithZoomInAnimation:(UIView*)view duration:(float)secs option:(UIViewAnimationOptions)option { // first reduce the view to 1/100th of its original dimen

AutoLayout

1. iOS两种自适应布局方式: -AutoLayout(自动布局) + SizeClasses(尺寸类别) -Autoresizing (自动调整尺寸/弹簧式调整尺寸) 前者 AutoLayout 是从iOS6出现,通过创建视图约束实现自适应,SizeClasses是iOS8 开始出现,用于配合AutoLayout使用,为解决所有(包括iPhone,iPad)iOS设备屏幕尺寸和屏幕旋转时UI的适配. 后者是早期开发使用的适配界面的方式,现在仍然保留.通过弹簧式调整控件尺寸,使其适应屏幕的尺寸

iOS 8 自动布局sizeclass和autolayout的基本使用

1.首先创建新的工程,设置rootviewcontroller(这里不再多说) 2.勾选下面(因为我们到下面是使用sizeClass,所以勾选两个): 3.这里我创建了一个lable,名称为View1,在这里可以看到设置View1的约束为距上和左侧为0,宽和高设置的都是200,同理可以设置距离右和下的约束,如图: 4.当上面工作完成以后,点击Add按钮,会出现黄色的约束范围,如下图: 5.上面工作完成后点击Update Frames,到此View1的约束创建完毕,如图.当我们要更改约束的时候,需

iOS AutoLayout的用法

添加约束 代码实现Autolayout的步骤 利用NSLayoutConstraint类创建具体的约束对象 添加约束对象到相应的view上 - (void)addConstraint:(NSLayoutConstraint *)constraint; - (void)addConstraints:(NSArray *)constraints; 代码实现Autolayout的注意点 要先禁止autoresizing功能,设置view的下面属性为NO view.translatesAutoresiz