PureLayout 3.1.9

PureLayout 3.1.9

测试已测试
语言语言 Obj-CObjective C
许可证 NOASSERTION
发布上次发布2021年9月

Tyler FoxMickey ReissJasonLucien Dupont维护。



  • 作者:
  • Tyler Fox

PureLayout

Build Status Version Platform License

适用于iOS & OS X Auto Layout的终极API — 非常简单,非常强大。PureLayout扩展了UIView/NSViewNSArrayNSLayoutConstraint,使用与Apple自用框架相似的全面Auto Layout API。PureLayout是一个跨平台的Objective-C库,在Swift中(看起来!)运行良好。它与所有支持Auto Layout的iOS和OS X版本完全向后兼容。

从头开始编写Auto Layout代码并不容易。PureLayout提供了一个功能齐全、针对开发者友好的Auto Layout接口。它旨在清晰和简单,并借鉴了Interface Builder中可用的Auto Layout UI选项,同时提供了更高的灵活性。该API还效率极高,因为它仅添加了一层薄薄的第三方代码,并针对最佳性能设计。

目录

  1. 设置
  2. API速查表
  3. 使用方法
  1. PureLayout 与其他相比
  2. 问题、建议、Pull Requests?

设置

兼容性

PureLayout 的当前版本支持所有版本的 iOS 和 OS X,自从每个平台上引入 Auto Layout 以来,无论是 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>(或启用 Module: @import PureLayout;
  • 在您的 Podfile 中不使用 use_frameworks!
    • Swift:将 #import "PureLayout.h" 添加到您的桥接头文件。
    • Objective-C: #import "PureLayout.h"

这就完成了。现在开始编写一些美丽的 Auto Layout 代码吧!

使用 Carthage

  1. PureLayout/PureLayout 项目添加到您的 Cartfile
github "PureLayout/PureLayout"
  1. 运行 carthage update,然后执行 其他必需步骤 将框架添加到您的项目中。
  2. 导入 PureLayout 框架/模块。
  • Swift: import PureLayout
  • Objective-C: #import <PureLayout/PureLayout.h>(或启用 Module: @import PureLayout;

这就完成了。现在开始编写一些美丽的 Auto Layout 代码吧!

从 GitHub 手动导入

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

这就完成了。现在开始编写一些美丽的 Auto Layout 代码吧!

应用扩展

为了在应用扩展中使用 PureLayout,您需要做一点额外的配置,以防止使用不可用的API。了解更多信息,请点击此处

发布

发布在git提交历史中使用语义化版本控制进行标记。检查发布和发布说明以了解每个版本的详细信息。

API速查表

这只是一个核心API方法的手册概览。探索头文件以获取完整的API,并在相应的.m文件中找到每个方法的实现上方的完整文档。以下是一些备注

  • 公共API方法都使用前缀auto...进行命名空间,这也使得Xcode在您键入时可以轻松完成自动填充。
  • 创建约束的方法也会自动安装(激活)约束,然后返回新约束以便您可以任意存储以供以后调整或删除。
  • 下面许多方法也有包含relation:参数的变体,以使约束成为一个不等式。

属性

PureLayout定义了用于创建自动布局约束的视图属性。这里可以看到最常见的属性图示

有5种特定的属性类型,这些类型在大多数API中使用。

  • ALEdge
  • ALDimension
  • ALAxis
  • ALMargin 仅适用于iOS 8.0及以上版本
  • ALMarginAxis 仅适用于iOS 8.0及以上版本

此外,还有一个通用的属性类型ALAttribute,它是所有特定类型的一个并集。您可以将其视为所有特定属性类型的“超类型”,这意味着可以将特定类型安全地转换为通用的ALAttribute类型。(请注意,反向操作是不安全的——将通用的ALAttribute转换为特定属性类型是不安全的!)

UIView/NSView

- autoSetContent(CompressionResistance|Hugging)PriorityForAxis:
- autoCenterInSuperview(Margins) // Margins variant iOS 8.0+ only
- autoAlignAxisToSuperview(Margin)Axis: // Margin variant iOS 8.0+ only
- autoPinEdgeToSuperview(Edge:|Margin:)(withInset:) // Margin variant iOS 8.0+ only
- autoPinEdgesToSuperview(Edges|Margins)(WithInsets:)(excludingEdge:) // Margins variant iOS 8.0+ only
- 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
- autoPinEdgeToSuperviewSafeArea: // iOS 11.0+ only
- autoPinEdgeToSuperviewSafeArea:withInset: // iOS 11.0+ only

NSArray

// Arrays of Constraints
- autoInstallConstraints
- autoRemoveConstraints
- autoIdentifyConstraints: // iOS 7.0+, OS X 10.9+ only

// Arrays of Views
- 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初始化器初始化视图

let view1 = UIView(forAutoLayout: ())

如果您需要使用不同的初始化器(例如在UIView子类中),您也可以使用configureForAutoLayout

view1.configureForAutoLayout() // alternative to UIView.init(forAutoLayout: ())

以下是通过PureLayout创建并自动激活的两个视图之间的约束

view1.autoPinEdge(.top, toEdge: .bottom, ofView: view2)

没有PureLayout,以下是您需要直接使用Apple的Foundation API编写的等效代码

NSLayoutConstraint(item: view1, attribute: .top, relatedBy: .equal, toItem: view2, attribute: .bottom, multiplier: 1.0, constant: 0.0).active = true

PureLayout在底层为您创建多个约束,使您能够编写易于阅读的布局代码

// 2 constraints created & activated in one line!
logoImageView.autoCenterInSuperview()

// 4 constraints created & activated in one line!
textContentView.autoPinEdgesToSuperviewEdges(with insets: UIEdgeInsets(top: 20.0, left: 5.0, bottom: 10.0, right: 5.0))

PureLayout始终返回它创建的约束,以便您有完全的控制权

let constraint = skinnyView.autoMatchDimension(.height, toDimension: .width, ofView: tallView)

PureLayout从iOS 11.0+支持安全区域

view2.autoPinEdge(toSuperviewSafeArea: .top)

PureLayout支持所有自动布局功能,包括不等式、优先级、布局边距、标识符等等。它是使用自动布局的综合、面向开发者的方法。

请查看下面的示例应用程序,以查看PureLayout的更多使用示例。

示例应用

打开仓库中包含的项目(需要 Xcode 6 或更高版本)。它包含了在各种场景中使用的库的 iOS(Example-iOS 构建方案)和 OS X(Example-Mac 构建方案)示例。iOS 示例应用中的演示非常适合作为 PureLayout 的入门教程 -- 运行每个演示,查看实现它的代码,然后练习对示例代码进行一些修改:

每个 iOS 示例应用中的演示都有 Swift 和 Objective-C 版本。**要编译和运行 Swift 演示,您必须使用 Xcode 7.0 或更高版本(Swift 2.0)并选择 Example-iOS-Xcode7 构建方案**。运行示例应用时,您可以轻松地在 Swift 和 Objective-C 版本之间切换。要查看 iOS 演示中的约束效果,请尝试在不同的设备模拟器中运行,旋转设备以不同的方向,以及在 iOS 模拟器中切换内置为通话状态的更长的状态栏。

在 OS X 上,运行应用时按任意键可遍历演示。您可以调整窗口大小以查看约束效果。

技巧和技巧

查看一些技巧和技巧,在使用 API 的过程中需要注意。

PureLayout 与其他库的比较

实现自动布局的方法有很多。以下是对可用选项的简要概述:

  • Apple NSLayoutConstraint SDK API
    • 优点:原始动力强大
    • 缺点:极端冗长;编写繁琐;难以阅读
  • Apple 视觉格式语言
    • 优点:简洁;方便
    • 缺点:不支持某些用例;缺乏编译时检查和安全;必须学习语法;难以调试
  • Apple 接口构建器
    • 优点:可视化;交互式;提供编译时布局检查
    • 缺点:对于复杂布局来说难以使用;无法在运行时动态设置约束;鼓励使用硬编码的魔法数字;不总是所见即所得
  • Apple NSLayoutAnchor SDK API
    • 优点:创建单个约束的清洁、可读和类型安全的 API
    • 劣势:仅在iOS 9.0和OS X 10.11及以上版本中可用;需要手动激活每个约束;没有一次创建多个约束的API
  • PureLayout
    • 优点:与Objective-C和Swift代码库兼容;与Cocoa API风格一致;iOS和OS X跨平台API和实现共享;完全向后兼容iOS 6及OS X 10.7;易于使用;类型安全;高效
    • 劣势:布局代码的表达方式并非最简洁的
  • 高级Auto Layout库/DSL(CartographySnapKitKeepLayout
    • 优点:非常清晰、简洁且方便
    • 劣势:独特的API风格与苹果API不同;Objective-C & Swift的兼容性混合;对第三方代码的依赖性更大

PureLayout采取平衡的方法对待Auto Layout,使其非常适合任何项目。

问题、建议、Pull Requests?

如果遇到与PureLayout特定的问题,或有功能请求或想分享评论,请在此处打开新问题。请注意,一般Auto Layout问题应该在Stack Overflow上提出。

鼓励和非常欢迎Pull Requests!请尽量保持与现有代码风格的一致性。如果您正在考虑进行重大的更改或扩展,请事先通过打开新Issue进行沟通。这使每个人都能跟上即将发生的变化,确保更改与项目的设计哲学保持一致,并避免重复工作。

元数据

最初由Tyler Fox(@smileyborg)设计和构建。目前由Mickey Reiss(@mickeyreiss)维护。遵循MIT许可证分发。