为iOS和OS X的自动布局最终的API -- 令人印象深刻的简单,非常强大。 PureLayout延伸的UIView /NSView , NSArray,和NSLayoutConstraint与之后苹果自己的框架,构建了一个全面的自动布局API 。 PureLayout是一个跨平台的Objective-C库,可以在伟大的Swift里工作(并查看!)。它完全与iOS的支持自动布局所有版本和OS X的向后兼容。

从头开始编写自动布局代码是不容易的。 PureLayout提供了自动布局完全有能力和开发者友好的界面。它设计清晰和简洁,并且灵感来自Interface Builder能提供更大的灵活性的自动版式UI选项。该API还高效的,因为它仅增加一薄层的第三方代码和被设计以获得最佳性能。

目录

  1. 创建
  2. API备注
  3. 用法
  • 示例代码
  • 示例应用程序
  1. PureLayout vs. Apple框架
  2. 问题,建议,引入请求?

创建

兼容性

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

  1. 添加' PureLayout`到你的 Podfile.
pod 'PureLayout'
  1. 运行终端pod install ,然后打开你的应用程序的.xcworkspace文件启动的Xcode 。
  2. 导入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

  1. 添加PureLayout / PureLayout项到您的 Cartfile.
github "PureLayout/PureLayout"
  1. 运行carthage update ,然后按照额外步骤添加框架到你的项目。
  2. 导入PureLayout框架/模块。
  • Swift:'import PureLayout`
  • Objective-C: #import < PureLayout / PureLayout.h > (或模块启用: @import PureLayout ;

这就是它 - 现在去写一些漂亮的自动布局代码!

手动从GitHub下载

  1. 下载的源文件 PureLayout subdirectory.
  2. 源文件添加到您的Xcode项目。
  3. 添加 PureLayout.h 头文件.
  • Swift: 添加 #import "PureLayout.h" 到你的桥接头文件.
  • Objective-C: #import "PureLayout.h"

这就是它 - 现在去写一些漂亮的自动布局代码!

App 扩展

要在应用程序扩展使用PureLayout ,你需要做一些额外的配置,以防止不可用的API的使用。 点击这里获取更多信息。

发布

发布的标签在使用Git的提交历史语义版本 。查看发布和发布说明为每个版本。

API 备注

这是核心API方法只是一个方便的概述。探索为全面的API 头文件 ,并找到相应.m文件的每个方法的实现上面的完整文档。有两点要注意:

  • 所有的公共API方法命名空间的前缀`auto...... ' ,这也很容易让Xcode的为您键入自动完成。
  • 创造的约束也会自动安装(激活)约束的方法,然后返回新的约束 ,您可以选择存储供以后调整或删除。
  • 许多方法等级也有一个变体,它包括一个relation:参数进行不平等约束。

属性

PureLayout定义了用于创建自动布局约束视图属性。这里是一个最常用的属性插图 。

有5个特定的属性类型,其用于在大部分的API :

  • ALEdge
  • ALDimension
  • ALAxis
  • ALMargin 在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 任务池

转载于:https://www.cnblogs.com/ios122/p/4925619.html

PureLayout,使用纯代码写AutoLayout相关推荐

  1. 史上比较用心的纯代码实现 AutoLayout

    入职有两三个月了吧,都是使用 Objective-C 纯代码(虽然有时候偷偷参杂一些 Swift 开源库)来编写公司APP,写布局的时候几乎都是要么在初始化的时候用 initWithFrame,要么就 ...

  2. 在Qt中如何用纯代码写一个本地视频播放器

    一.首先用纯代码写本地视频播放器需要用到以下类 #include <QWidget> #include <QHBoxLayout> //水平布局 #include <QV ...

  3. Shader toy (顺手写两个Gyro)(纯代码写3D)

    Shader toy (A new world) 1.一个多月了,突然忘记CSDN的password了.由于每次输password的时候都要计算一遍,于是没有计算出来- 2.回头发现都过了半年了,都快 ...

  4. (素材源码)猫猫学IOS(十七)UI之纯代码自定义Cell实现新浪微博UI

    猫猫分享,必须精品 素材代码地址:http://download.csdn.net/detail/u013357243/8580249 原文地址:http://blog.csdn.net/u01335 ...

  5. 猫猫学IOS(十七)UI之纯代码自定义Cell实现新浪微博UI

    猫猫分享,必须精品 素材代码地址:http://blog.csdn.net/u013357243/article/details/44976175 原文地址:http://blog.csdn.net/ ...

  6. IOS纯手写代码支持旋屏

    2019独角兽企业重金招聘Python工程师标准>>> 不用ib纯手写代码实现旋屏效果,xcode4.6.3,今天试了一下,可以做到,但是代码量会增加,基本思路是:在 - (void ...

  7. 【JS 纯手写轮播图代码】

    轮播图实现 首先需要在同级目录下创建img文件夹,用以储存你需要轮播的图片,注意设置好图片的宽度,以免出现空白区域.然后就可以愉快地实现轮播功能啦~ // An highlighted block & ...

  8. 记录一下曾经写过的P2P金融项目-理财端(PC端)纯代码(续-服务消费者工程)

    pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...

  9. ios 纯代码怎么适配ipad_iOS屏幕适配(纯代码)

    在iOS实际项目开发中, 我们经常要适配不同尺寸的屏幕,如iPhone4s,iPhone5/s,iPhone6/s,iPhone6Plus等. 在代码中创建一个控件如: UILabel *label ...

  10. 纯代码计算不等高cell

    不等高cell纯代码: 对应的GitHub 项目链接:https://github.com/liminting/CalculateCellDemo 不等高cell - 先设置高度rowH = 250 ...

最新文章

  1. 通过Samba实现Win/Mac访问Linux
  2. [转]关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决...
  3. mysql基础(二)—— 简单sql
  4. 补丁分发 linux,patch 命令应用补丁
  5. VTK:网格之OBBDicer
  6. 信用评分python_信用评分卡(python)
  7. LeetCode 107. 二叉树的层次遍历 II(队列)
  8. java链表的输出_Java输出链表倒数第k个节点
  9. jpg怎么合成一份_海外商标注册申请程序复杂吗?应该怎么注册?
  10. php神盾 var 1.54,神盾加密解密教程(一)PHP变量可用字符
  11. idea 添加配置文件 绿叶子
  12. OpenOCD 依赖的deb包
  13. IntelliJ IDEA导入Spring源码
  14. JavaScript纯前端上传和下载文件
  15. zipentry java_java中的ZipEntry是什么意思?
  16. 关于app 元素定位
  17. qq2009 好像和金山词霸屏幕取词有冲突
  18. 全息投影是计算机技术吗,全息投影技术在使用过程中要注意哪些问题?
  19. 基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成
  20. opencv和magick两个图像处理库的使用心得

热门文章

  1. 物质的粒子应该是空心的
  2. RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is Fal
  3. Python中Queue.get()方法阻塞,怎么办?
  4. CPU个数引起服务器软件启动失败的事故
  5. 开发环境搭建好,也要做镜像
  6. jpeglib的jpeg_finish_compress函数疑似越界
  7. python 直方图的绘制方法全解_5种方法教你用Python玩转histogram直方图
  8. C++ vs ini GetPrivateProfileInt的使用和说明;带一个实例
  9. linux mysql 编译后的版本_LINUX下编译安装最新版本mysql_MySQL
  10. int转字符串_python3基础01数值和字符串(一)