ConstraintFormatter是一个库,用于统一Auto Layout中的可视约束和基于属性的约束。
基于属性编写NSLayoutConstraints非常繁琐,而使用此库,您可以轻松地编写并混合它们与可视约束。如下所示
#import "ConstraintFormatter.h"
...
id views = @{@"view1": view1, @"view2": view2};
id metrics = @{@"margin": @10};
id formats = @[@"view1.bottom == view2.top + margin",
@"view1.centerX == superview.centerX",
@"H:|-margin-[view1]-margin-|",
@"H:|[view2]|"];
[view addConstraintsWithFormats:formats
views:views
metrics:metrics];
如你所见,视图和指标被用来定义约束。另外,值得注意的是,库为您在所有视图上调用setTranslatesAutoresizingMaskIntoConstraints:NO。
centerX 和 centerY 的快捷方式
@"view2.center == view1.center"
为了定义centerX 和 centerY 的偏移量,请在括号内提供它们
@"view2.center == view1.center(40, 40)"
top, left, bottom, right 的快捷方式
@"view1.edges == superview.edges"
为了定义top, left, bottom, right的内边距,请在括号内提供它们
@"view1.edges == superview.edges(25, 35, 25, 35)"
width 和 height 的快捷方式
@"view1.size == view2.size"
为了指定具有偏移量的width 和 height的值,请在括号内提供它们
@"view1.size == view2.size(50, 50)"
为了指定width 和 height的值,请在括号内提供它们
@"view1.size == (50, 50)"
如果约束在两个视图中使用相同的属性,则指定属性是可选的
view1.centerX == view2.centerX
// is the same as
view1.centerX == view2
指定两个视图之间的关系
@"view1.centerX == view2.centerX"
指定一个视图的属性的值
@"view1.width >= 30"
使用+或-来定义常量
@"view1.centerX == view2.centerX + 10"
@"view1.centerY == view2.centerY - 10"
使用*来定义乘数
@"view1.width == view2.width * 0.5"
您还可以使用/来定义乘数
@"view1.width == view2.width / 2"
您可以混合常量和乘数
@"view1.width == view2.width * 0.5 - 10"
如果您想引用所有约束都将添加的视图,请直接使用 'superview'
@"view1.centerX == superview.centerX"
限制的优先级可以设置为以下选项
@"view1.width@750 == view2.width"
在仓库进行Fork和Clone,然后
gem install cocoapods
cd Tests
pod install
open ConstraintFormatter.xcworkspace
要运行测试,只需按Command+U或进入菜单产品 -> 测试。
要运行示例应用,只需按Command+R或产品 -> 运行。
要编辑库文件,只需打开项目导航器,并在Pods -> 开发Pods -> ConstraintFormatter下编辑文件。