LayoutKit 是一个用于 iOS、macOS 和 tvOS 的快速视图布局库。
动机
LinkedIn 开发了 LayoutKit,因为我们发现 Auto Layout 对于可滚动视图中的复杂视图层次结构来说性能不足。有关更多背景信息,请阅读 博客文章。
好处
LayoutKit 与使用 Auto Layout 相比具有许多优点
- 快速:LayoutKit 与手动布局代码一样快,并且比 Auto Layout 快得多。
- 异步:布局可以在后台线程中计算,因此用户交互不会中断。
- 声明式:布局使用不可变的数据结构声明。这使得布局代码更容易开发、文档化、代码审查、测试、调试、分析性能和维护。
- 可缓存:布局结果是不可变的数据结构,因此它们可以在后台预先计算并缓存以提高用户体验的性能。
LayoutKit 还提供了一些好处,使其与 Auto Layout 一样易于使用
- UIKit 兼容:LayoutKit 生成 UIView,还提供了一个适配器,使其易于与 UITableView 和 UICollectionView 一起使用。
- 国际化:LayoutKit 会自动调整视图框架以适应从右到左的语言。
- Swift:LayoutKit 可用于 Swift 应用和 playground。
- 经过测试和适用于生产的:LayoutKit 已由单元测试覆盖,并被用于 LinkedIn 和 LinkedIn Job Search iOS 应用程序的最新版本。
- 开源:不像 Auto Layout 那样是一个黑盒子。
- Apache 许可证(v2):您的律师将会很高兴,因为没有专利阴谋。
你好,世界
let image = SizeLayout<UIImageView>(width: 50, height: 50, config: { imageView in
imageView.image = UIImage(named: "earth.jpg")
})
let label = LabelLayout(text: "Hello World!", alignment: .center)
let stack = StackLayout(
axis: .horizontal,
spacing: 4,
sublayouts: [image, label])
let insets = UIEdgeInsets(top: 4, left: 4, bottom: 4, right: 8)
let helloWorld = InsetLayout(insets: insets, sublayout: stack)
helloWorld.arrangement().makeViews(in: rootView)
局限性
我们发现LayoutKit是一个有用的工具,但你应该知道它不是什么。
- LayoutKit不是一个基于约束的布局系统。如果你想在视图之间表达约束,那么这些视图需要是单个实现该约束代码的布局的子视图。
- LayoutKit不是弹性盒子,但你可能发现它们有相似之处。
安装
LayoutKit可以通过CocoaPods或Carthage进行安装。
CocoaPods
将这些内容添加到Podspec文件中
pod 'LayoutKit'
然后运行pod install
。
Carthage
将这些内容添加到Cartfile文件中
github "linkedin/LayoutKit"
然后运行carthage update
。
文档
现在,你可以开始构建UI了。