PureLayout,使用纯代码写AutoLayout
为iOS和OS X的自动布局最终的API -- 令人印象深刻的简单,非常强大。 PureLayout延伸的UIView /NSView , NSArray,和NSLayoutConstraint与之后苹果自己的框架,构建了一个全面的自动布局API 。 PureLayout是一个跨平台的Objective-C库,可以在伟大的Swift里工作(并查看!)。它完全与iOS的支持自动布局所有版本和OS X的向后兼容。
从头开始编写自动布局代码是不容易的。 PureLayout提供了自动布局完全有能力和开发者友好的界面。它设计清晰和简洁,并且灵感来自Interface Builder能提供更大的灵活性的自动版式UI选项。该API还高效的,因为它仅增加一薄层的第三方代码和被设计以获得最佳性能。
目录
创建
兼容性
PureLayout的当前版本支持所有版本的iOS和OS X的,因为每个平台上推出自动布局,在这两个Swift和Objective-C ,用一个单一的代码库!
- Xcode
- 语言支持: Swift (任何版本), Objective-C
- 完全兼容: Xcode 7.0
- 支持的最低版本: Xcode 5.0
- iOS
- 完全兼容: iOS 9.0
- 最低部署版本: iOS 6.0
- OS X
- 完全: OS X 10.11
- 最低部署版本: OS X 10.7
运用 CocoaPods
- 添加' PureLayout`到你的 Podfile.
pod 'PureLayout'
- 运行终端
pod install,然后打开你的应用程序的.xcworkspace文件启动的Xcode 。 - 导入
PureLayout.h头文件。
- 在你Podfile文件使用
use_frameworks !- Swift:'import PureLayout`
- Objective-C的:
#import < PureLayout / PureLayout.h >(或模块启用:@import PureLayout ;)
- 如果你Podfile里没有
use_frameworks !- Swift:添加` #import “ PureLayout.h ” '你的桥接头文件。
- Objective-C的:
#import “ PureLayout.h ”
这就是它 - 现在去写一些漂亮的自动布局代码!
运用 Carthage
- 添加
PureLayout / PureLayout项到您的 Cartfile.
github "PureLayout/PureLayout"
- 运行
carthage update,然后按照额外步骤添加框架到你的项目。 - 导入PureLayout框架/模块。
- Swift:'import PureLayout`
- Objective-C:
#import < PureLayout / PureLayout.h >(或模块启用:@import PureLayout ;)
这就是它 - 现在去写一些漂亮的自动布局代码!
手动从GitHub下载
- 下载的源文件 PureLayout subdirectory.
- 源文件添加到您的Xcode项目。
- 添加
PureLayout.h头文件.
- Swift: 添加
#import "PureLayout.h"到你的桥接头文件. - Objective-C:
#import "PureLayout.h"
这就是它 - 现在去写一些漂亮的自动布局代码!
App 扩展
要在应用程序扩展使用PureLayout ,你需要做一些额外的配置,以防止不可用的API的使用。 点击这里获取更多信息。
发布
发布的标签在使用Git的提交历史语义版本 。查看发布和发布说明为每个版本。
API 备注
这是核心API方法只是一个方便的概述。探索为全面的API [头文件](PureLayout / PureLayout) ,并找到相应.m文件的每个方法的实现上面的完整文档。有两点要注意:
- 所有的公共API方法命名空间的前缀`auto...... ' ,这也很容易让Xcode的为您键入自动完成。
- 创造的约束也会自动安装(激活)约束的方法,然后返回新的约束 ,您可以选择存储供以后调整或删除。
- 许多方法等级也有一个变体,它包括一个
relation:参数进行不平等约束。
属性
PureLayout定义了用于创建自动布局约束视图属性。这里是一个最常用的属性插图 。
有5个特定的属性类型,其用于在大部分的API :
ALEdgeALDimensionALAxisALMargin在iOS8.0和更高版本可用ALMarginAxis在iOS8.0和更高版本可用 *
此外,还有一个通用属性类型, ALAttribute ,这是有效地所有特定类型的联合。你可以认为这是“父类”的所有具体属性类型的,这意味着它始终是安全蒙上了特定类型的通用 ALAttribute类型。 (请注意,反之则不然 - 铸造的一般ALAttribute到一个特定的属性类型是不安全的! )
UIView/NSView
- autoSetContent(CompressionResistance|Hugging)PriorityForAxis:
- autoCenterInSuperview(Margins) // Margins 变体仅 iOS 8.0+ 使用
- autoAlignAxisToSuperview(Margin)Axis: // Margins 变体仅 iOS 8.0+ 使用
- autoPinEdgeToSuperview(Edge:|Margin:)(withInset:) // Margins 变体仅 iOS 8.0+ 使用
- autoPinEdgesToSuperview(Edges|Margins)(WithInsets:)(excludingEdge:) // Margins 变体仅 iOS 8.0+ 使用
- autoPinEdge:toEdge:ofView:(withOffset:)
- autoAlignAxis:toSameAxisOfView:(withOffset:|withMultiplier:)
- autoMatchDimension:toDimension:ofView:(withOffset:|withMultiplier:)
- autoSetDimension(s)ToSize:
- autoConstrainAttribute:toAttribute:ofView:(withOffset:|withMultiplier:)
- autoPinTo(Top|Bottom)LayoutGuideOfViewController:withInset: // iOS only
NSArray
// 约束数组
- autoInstallConstraints
- autoRemoveConstraints
- autoIdentifyConstraints: // 仅iOS 7.0+, OS X 10.9+
// 视图数组
- autoAlignViewsToEdge:
- autoAlignViewsToAxis:
- autoMatchViewsDimension:
- autoSetViewsDimension:toSize:
- autoSetViewsDimensionsToSize:
- autoDistributeViewsAlongAxis:alignedTo:withFixedSpacing:(insetSpacing:)(matchedSizes:)
- autoDistributeViewsAlongAxis:alignedTo:withFixedSize:(insetSpacing:)
NSLayoutConstraint
+ autoCreateAndInstallConstraints:
+ autoCreateConstraintsWithoutInstalling:
+ autoSetPriority:forConstraints:
+ autoSetIdentifier:forConstraints: // iOS 7.0+, OS X 10.9+ only
- autoIdentify: // iOS 7.0+, OS X 10.9+ only
- autoInstall
- autoRemove
用法
实例代码 (Swift)
PureLayout大大简化了编写自动布局代码。让我们快速浏览一下一些例子,Swift使用PureLayout。
下面是使用PureLayout创建(自动启动)两种观点之间的约束:
view1.autoPinEdge(.Top, toEdge: .Bottom, ofView: view2)
如果没有PureLayout ,这里的等效代码,你就必须直接使用苹果的基础API写的:
NSLayoutConstraint(item: view1, attribute: .Top, relatedBy: .Equal, toItem: view2, attribute: .Bottom, multiplier: 1.0, constant: 0.0).active = true
PureLayout 很多 Api 创建多个约束为你引擎盖,让你写出可读性很强的布局代码:
// 2 constraints created & activated in one line!
logoImageView.autoCenterInSuperview()
// 4 constraints created & activated in one line!
textContentView.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsets(top: 20.0, left: 5.0, bottom: 10.0, right: 5.0))
PureLayout 总是返回它创建,以便您可以完全控制的约束:
let constraint = skinnyView.autoMatchDimension(.Height, toDimension: .Width, ofView: tallView)
PureLayout 支持自动布局的所有功能,包括不平等、 优先事项、 版式边距、 标识符和更多。它是全面,开发者友好的方式来使用自动布局。
注: 文章由我们iOS122的小伙伴 @ 静静 整理,喜欢就一起参与: iOS122 任务池
PureLayout,使用纯代码写AutoLayout的更多相关文章
- 史上比较用心的纯代码实现 AutoLayout
入职有两三个月了吧,都是使用 Objective-C 纯代码(虽然有时候偷偷参杂一些 Swift 开源库)来编写公司APP,写布局的时候几乎都是要么在初始化的时候用 initWithFrame,要么就 ...
- 纯代码写UI的时候,如何指定style?
有的时候,需要使用纯代码实现Android UI,那么这个时候如何指定某个UI组件的样式呢? 一般来说,UI组件都有一些set方法可供使用,以调整一些UI属性,从而达到调整样式的目的. 但是,情况并非 ...
- Shader toy (顺手写两个Gyro)(纯代码写3D)
Shader toy (A new world) 1.一个多月了,突然忘记CSDN的password了.由于每次输password的时候都要计算一遍,于是没有计算出来- 2.回头发现都过了半年了,都快 ...
- 利用纯代码写出一个秒表表盘的方法 —— #DF
@interface ViewController () @property (nonatomic, strong) CALayer *secLayer; // 秒针layer @property ( ...
- 【iOS开发】多屏尺的自动适配 AutoLayout (纯代码方式)
关于AutoLayout,最早从iOS6开始引入使用. 主要功能是使用约束,对视图进行相对布局,以适应不同屏尺的变换. 网上大量的资料都在介绍xib和storyboard,如何使用AutoLa ...
- 纯代码Autolayout的三种方法
Autolayout讲解较多的就是xib和storyboard用法,本文主要记录纯代码的Autolayout使用方法: 方法1.苹果原生的方法,这种方法虽然简单但是太过繁杂,可用性很差 //宽度=su ...
- 如何优雅的代码编写 AutoLayout
概述 使用 Objective-C 纯代码编写 AutoLayout,看 AutoLayout 的字面理解就是自动布局,听起来好像蛮屌的样子.说白了就是适配:适应.兼容各种不同的情况,包括不同版本的操 ...
- swift 之 纯代码创建 cell
初学swift 但是网上只有很多swift用xib创建的cell,就算是有也不是我想要的.今天自己弄了一个不用xib纯代码写的,来上代码 博客地址: https://github.com/liguol ...
- iOS高仿app源码:纯代码打造高仿优质《内涵段子》
iOS高仿app源码:纯代码打造高仿优质<内涵段子>收藏下来 字数1950 阅读4999 评论173 喜欢133 Github 地址 https://github.com/Charlesy ...
随机推荐
- Unity Screen Screen.currentResolution 当前分辨率
The current screen resolution (Read Only). 当前屏幕的分辨率.(只读) If the player is running in window mode, th ...
- 性能测试工具Jmeter05-badboy检查点与参数化
检查点设置 选择要检查的文字,然后在Tools->Add Assertion for Selection里添加断言,在进行回放 参数化 在请求搜索关机键字的部分进行参数化 选中搜索关键字- ...
- Hadoop2.X HA架构与部署
HDFS-HA原理及配置 1.HDFS-HA架构原理介绍 hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA ...
- vue中添加echarts
方法一:全局引入echarts 步骤: 1.全局安装 echarts依赖. cnpm install echarts -- save 2.引入echarts模块,在Vue项目的main. ...
- 关于webform textbox Password 模式
textbox在这个模式时,如果进行点击按钮或者其他与后台交互的操作,则状态不会保留,既密码框内容会被清空: 这个可以在前台使用 隐藏控件加js获取密码框内容赋值到隐藏控件,点击刷新后通过后台为密码框 ...
- Linux访问https报错
今天用Linux(CentOS)拉Git仓库时,报了个错unable to access 'https://github.com/Wind4/vlmcsd.git/': SSL connect err ...
- Javascript 对象(Object)
//声明方式 //调用 Object构造函数创建 var user = new Object(); user.name = "小白"; user.say = function () ...
- SpringBoot系列之——整合JPA、mysql
一.JPA 1. 概念:JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 2. ...
- React 内部属性与函数
constructor 构造函数,在创建组件的时候调用一次. 例子: class TodoList extends React.Component { constructor(props, conte ...
- Unity Shader 阴影
最近在看Unity shader开发实战详解,刚开始看阴影部分,稍微有了点思路.在这里写点笔记,算是小结吧. .阴影实现方法 一种是通过模拟光照的原理,用向量的方法 找到被光线照射的点 映射到平面的位 ...
