LayoutKitObjC 10.1.0

LayoutKitObjC 10.1.0

Sergei TaguerKyle Sherman 维护。



  • 作者
  • LinkedIn

LayoutKit

CocoaPods GitHub release Build Status codecov

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)

Hello world example layout

局限性

我们发现LayoutKit是一个有用的工具,但你应该知道它不是什么。

  • LayoutKit不是一个基于约束的布局系统。如果你想在视图之间表达约束,那么这些视图需要是单个实现该约束代码的布局的子视图。
  • LayoutKit不是弹性盒子,但你可能发现它们有相似之处。

安装

LayoutKit可以通过CocoaPodsCarthage进行安装。

CocoaPods

将这些内容添加到Podspec文件中

pod 'LayoutKit'

然后运行pod install

Carthage

将这些内容添加到Cartfile文件中

github "linkedin/LayoutKit"

然后运行carthage update

文档

现在,你可以开始构建UI了。