AJLayoutKit
AJLayoutKit 为 iOS Auto Layout 添加了一些语法糖,使用接近 VFL 的语法,并且可以方便地使用百分比布局。语法糖参考了 Stevia,并进行了一些改进。
- 宽度/高度父容器百分比
- 间隔父容器百分比
- 支持安全区域
- 修改 AJValue 自动更新约束(暂时有 bug)
使用示例
self.view.layout(
|-(10% + 10)-title,
|-(10% + 10)-panel-(10% + 10 ^ "right ratio span")-|,
&-title-(10 ^ "title bottom")-panel,
panel.layout(
|-15-avatar.width(20%)-15-name-15-level-15-vip,
&-15-avatar-15-&,
&-15-name-15-desc,
avatar.Width == avatar.Height,
equal(.centerY, name, level, vip),
equal(.leading, name, desc)
),
||v1.size(50% + 15)-(50% - 15)-|,
&-(50% - 15)-v1.size(50% + 15)
)
布局方式主要有三种:
- 类似于 VFL 的链式语法,|代表父容器以及水平方向布局,&代表父容器以及垂直方向布局,||表示水平布局,&&表示垂直布局,在 iOS 11 的版本上默认支持安全区域。
- 关联属性关系,类似于
avatar.Width == avatar.Height
,支持语法attr1 == attr2*multiplier + constant ~ priority
。- 使用函数定义,比如 UIView 的 size,width,height,或者是 equal。
AJValue
可以使用下面的语法来定义一个 AJValue 值,并将其用于所有的间隙、宽度、高度等内容,语法如下:
let v: AJValue = ratio% + constant ~ priority ^ "identifier"
同时也有三个函数来定义 AJValue
func vw(_ value: Double) -> AJValue
,类似于 CSS 中的 vw 单位,效果相当于screenWidth * value / 100
func vh(_ value: Double) -> AJValue
,类似于 CSS 中的 vh 单位,效果相当于screenHeight * value / 100
func rpx(_ value: Double) -> AJValue
,类似于微信小程序或者 weex 中的单位,效果相当于screenHeight * value / 750