测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | BSD |
发布最新发布 | 2015年9月 |
由 Blazej Marcinkiewicz、Polidea 维护。
PLXVisualAttributeConstraints 是一个小型库,它可以更容易地创建布局约束(参见: NSLayoutConstraint 类)。
如果您对 AutoLayout 机制了解不多,我强烈建议您前往这里 了解更多信息。
PLXVisualAttributeConstraints 不会取代标准的VFL (Visual Format Language) 或修改 Apple 的默认机制。它与之无缝集成,并大大提高了开发者的生产力和代码可读性。
简而言之,有两个视图...
UIView *firstViewObj = ...
UIView *secondViewObj = ...
使用此库,您可以创建以下布局约束:
NSDictionary *views = @{
@"firstView" : firstViewObj,
@"secondView" : secondViewObj
};
NSLayoutConstraint *constraint1 =
[NSLayoutConstraint attributeConstraintWithVisualFormat:@"secondView.left >= firstView.left * 2 + 10"
views:views];
而不是标准
NSLayoutConstraint *constraint2 =
[NSLayoutConstraint constraintWithItem:secondViewObj
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationGreaterThanOrEqual
toItem:firstViewObj
attribute:NSLayoutAttributeLeft
multiplier:2
constant:10];
这两个约束(constraint1
和 constraint2
)彼此是相同的。
您可能会有很多约束(这是一个常见的情况)。注意,您只需在创建约束的方法开始时创建一次包含视图的字典(例如),然后继续以类似的单行方式创建它们(如上面的示例所示),或者您还可以利用另一个方法
NSArray *constraints = [NSLayoutConstraint attributeConstraintsWithVisualFormatsArray:@[
@"secondView.left <= firstView.left - 10",
@"secondView.right >= firstView.right + 10",
@"secondView.top == firstView.bottom * 2.5 + 5",
] views:views];
在此处不介绍正式的语法,我相当确信一些示例就足够让您快速入门。
control1.top >= control2.bottom + 20
control1.top <= control2.bottom - 20.5
control1.top == control2.bottom * 2.3 + 4.5
control1.top >= control2.bottom * 2 - 10
有点黑客风格(继续阅读以了解原因):control1.top >= 100
control1.top == 100.5
top
、bottom
、left
、right
、leading
、trailing
、width
、height
、centerx
、centery
、baseline
(不区分大小写)这些属性与这些枚举一一对应。
==
、>=
、<=
(与这些枚举一一对应)
要查看库的实际应用(与标准约束创建方法进行比较),请查看项目。通过*.xcworkspace
打开,而不是*.xcproject
文件(为什么?CocoaPods)。是的,我知道这个例子有些人为化 :) 但它将足够用。如果你有更好的示例准备建议,欢迎提交拉取请求 :)
就像我上面提到的,支持类似control1.top >= 100
(右侧没有属性,只有常量)的格式。
整个库是对这个方法的一个薄封装,正如我们所读到的
约束的格式是
view1.attr1 <关系> view2.attr2 * 积分 + 常量
。如果你想要表示的约束没有第二个视图和属性,请使用nil
和NSLayoutAttributeNotAnAttribute
。
嗯...这适用于左边的width
或height
属性约束(如control1.width == 100
)。在其他属性的情况下(如top
、left
...),在创建约束时会抛出异常...这在某种程度上是有道理的。
有时你可能仍然想要创建这样的约束。在这种情况下,你可以创建control1.top == control1.top * 0 + 50
,它应该表现得与control1.top == 50
完全一样,并且它确实如此 :)
简化版
约束control1.top >= 100
将自动创建为control1.top >= control1.top * 0 + 100
,我认为这是一个小小的黑客技巧,因此在这里进行详细说明。
只需将源文件复制到您的项目中,位置在PLXVisualAttributeConstraints/PLXVisualAttributeConstraints/*
。将通过CocoaPods安装支持将很快提供。
Kamil Jaworski ([email protected]), Polidea