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
。 您可以在BayaLayoutable
或BayaLayoutable
的数组上调用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。
在代码库中发现令人尴尬的错误?
对概念还是徽标中的酷鸟有什么想法?
在下面放一个答案!