Baya,Swift的布局框架。

思想和基准。

这个主意。

Baya的想法可以追溯到2016年6月。具有讽刺意味的是,Android开发人员Backstage Podcast的第50集-最重要的是ContraintLayout ,这个概念与Baya完全不同。

进入事件大约15分钟后,讨论转移到一些基本原则,例如将视图层次结构与布局层次结构分离以及它们称为“虚拟视图组”的概念。 切特总结了这部分内容:

“因此,它为您提供了从ViewGroups或单独的布局获得的封装,而在这些嵌套的东西的视图层次结构中没有额外的开销”

但是,这就是事情。 我真的很喜欢查看布局代码,并且能够快速推断出布局的外观。 使用ContraintLayout至少可以使您摆脱ContraintLayout 。 当使用这样的系统时,我最终会使用可视化编辑器。

梦想是保持可读性,但将布局和视图层次结构分开。 Android和Java的问题是,要么在实现适合现有系统的布局类时扩展View ,从而根本不展平视图层次结构,要么子类化我们要使用的每个View类我们的布局系统,以使它们实现新的界面。 两种选择都没有太大意义,就是这样。

当我和JoachimFröstl开始为iOS开发时,Swift改变了所有这些情况。

轻量级结构以及使用扩展添加协议一致性的能力正是我们所需要的。 我们从编写一个简单的协议和一些扩展程序开始,使我们的生活更轻松-没多长时间,Baya诞生了。

这个概念。

Baya围绕一些原则构建。 它们都起源于核心思想,除了最后一个更像是表现。

  • 通过分离布局逻辑的平面视图层次结构。
  • 通过将布局代码封装在具有描述性名称的结构中,以提高可读性。
  • 通过面向协议的可扩展性。 一个人应该能够编写自定义封装的布局逻辑并将其插入。
  • 布局定义,测量阶段和布局阶段的分离。

一个例子。

每个UIView都是一个BayaLayoutable 。 您可以在BayaLayoutableBayaLayoutable的数组上调用Extension函数来创建布局。 这些布局还实现了BayaLayoutable

最后,通过调用layout?.startLayout(with: bounds)layoutSubviews()viewWillLayoutSubViews()启动布局例程。 如果需要度量通过的结果,例如在sizeThatFits() ,请调用layout?.startMeasure(with: size)

在100个子视图中具有19毫秒的时间,看来Baya是使用上述实现方式禁食的对象。 介意的不是很多,但是我们就在PinLayout的正下方。 这是另一款配备iPhone 6Plus的手机(我周围有一个)。

我认为这几毫秒不会带来很大的变化,因此请以该基准为准。 如果您有兴趣,请查看回购-如果您认为我在某处作弊,请在下面发表评论!

谢谢阅读!

我希望您喜欢阅读本文。 将这些想法写下来然后忘掉是很有趣的。

截至撰写本文时,Baya仍为0.2.0版本。 我们在两个项目中使用了它,并且很享受与它一起工作。 一些布局挑战使我们几次改进了API。 由于我们大部分时间都是自己使用Baya,因此我们没有得到太多反馈,也不想暂时锁定API。

在代码库中发现令人尴尬的错误?
对概念还是徽标中的酷鸟有什么想法?
在下面放一个答案!