PLXVisualAttributeConstraints 1.0.0

PLXVisualAttributeConstraints 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 BSD
发布最新发布2015年9月

Blazej MarcinkiewiczPolidea 维护。



  • 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];

这两个约束(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 <关系> view2.attr2 * 积分 + 常量。如果你想要表示的约束没有第二个视图和属性,请使用nilNSLayoutAttributeNotAnAttribute

嗯...这适用于左边的widthheight属性约束(如control1.width == 100)。在其他属性的情况下(如topleft...),在创建约束时会抛出异常...这在某种程度上是有道理的。

有时你可能仍然想要创建这样的约束。在这种情况下,你可以创建control1.top == control1.top * 0 + 50,它应该表现得与control1.top == 50完全一样,并且它确实如此 :)

简化版

约束control1.top >= 100将自动创建为control1.top >= control1.top * 0 + 100,我认为这是一个小小的黑客技巧,因此在这里进行详细说明。

安装

只需将源文件复制到您的项目中,位置在PLXVisualAttributeConstraints/PLXVisualAttributeConstraints/*。将通过CocoaPods安装支持将很快提供。

要求

  • iOS 6.0+

注意

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

作者

Kamil Jaworski ([email protected]), Polidea