PLVisualAttributeConstraints 1.0.1

PLVisualAttributeConstraints 1.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 BSD
发布上次发布2016年11月

未知维护。



  • 作者
  • Polidea

描述

PLVisualAttributeConstraints 是一个小型库,使得创建布局约束变得更容易(查看:NSLayoutConstraint 类)。

如果您对 AutoLayout 机制不是很了解,我强烈建议您查看此处了解更多信息。

PLVisualAttributeConstraints 试图取代标准的 VFL (可视化格式语言) 或更改 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];

这两个约束 (constraint1constraint2) 相互之间是 相同的

您可能会有很多约束(这是一个常见的场景)。注意,您只需要创建 一次 包含视图的字典(例如,在创建约束方法的开头),然后继续使用类似的一行代码创建它们(如上面的示例所示),或者您还可以利用另一个方法

  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

支持的属性有

topbottomleftrightleadingtrailingwidthheightcenterxcenterybaseline(不区分大小写)这些属性与 这些枚举 一一对应。

支持的关系

==>=<=(与这些枚举一一映射)

示例

要查看库发挥作用的情况(以及与标准创建约束的方法进行比较),请检查项目。通过*.xcworkspace打开它,而不要使用*.xcproject文件(为什么?CocoaPods)。是的,我知道这个例子有些人为制作,但是它足够了。如果您有更好的演示准备建议,请提交拉取请求:)

技巧

如前所述,支持类似control1.top >= 100(右侧没有属性,只有常量)的格式。

整个库是对此方法的薄包装,并且当我们读取

约束的形式为view1.attr1 <relation> view2.attr2 * multiplier + constant。如果您要表达约束没有第二个视图和属性,请使用nilNSLayoutAttributeNotAnAttribute

嗯……这适用于左侧有widthheight属性的约束(例如control1.width == 100)。对于任何其他属性(例如topleft……),在创建约束时会抛出异常……这在某些情况下是有意义的。

有时您可能仍然想创建这样一条约束。在这种情况下,您可以创建control1.top == control1.top * 0 + 50,这应该与control1.top == 50具有完全相同的行为:)

TL;DR

约束如control1.top >= 100会自动创建为control1.top >= control1.top * 0 + 100,我认为这有点像黑客技术,因此在此进行说明。

安装

只需将PLVisualAttributeConstraints/PLVisualAttributeConstraints/*下的源文件复制到您的项目中。支持通过CocoaPods安装将很快到来。

需求

  • iOS 6.0+

备注

  • 要打开项目,请使用*.xcworkspace而不是*.xcproject文件(因为我使用、喜欢并推荐CocoaPods
  • 使用了Kiwi框架创建测试

作者

卡米尔·尤沃尔斯基([email protected]),Polidea