CompactConstraint 0.1.0

CompactConstraint 0.1.0

测试测试过
Lang语言 Obj-CObjective C
许可证 MIT
发布最新版本2014 年 12 月

Marco Arment 维护。



  • Marco Arment

一个简单的 NSLayoutConstraint 表达式解析器,用于编写更易读的 autolayout 代码。由 Marco Arment 编写,并使用 MIT 许可证发布(见 LICENSE 文件)。

Apple 的 视觉格式语法非常有用,但它无法表示所有类型的 autolayout 约束,并且对于简单的值来说并不理想。手动创建 NSLayoutConstraints 更强大,且涵盖所有可能性,但非常啰嗦而且难以阅读。

CompactConstraint 将紧凑、易读的语法带到了手动创建 NSLayoutConstraints 中。简而言之,您不需要像这样编写 Cocoa autolayout 约束

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:emailLabel attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:emailField attribute:NSLayoutAttributeLeft multiplier:1.0f constant:0.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:spinner attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:logInButton attribute:NSLayoutAttributeRight multiplier:1.0f constant:10.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:preview attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:preview attribute:NSLayoutAttributeWidth multiplier:0.625f constant:0.0f]];

CompactConstraint 允许您这样编写

[self.view addCompactConstraint:@"emailLabel.left >= emailField.left" metrics:metrics views:views];
[self.view addCompactConstraint:@"spinner.left = logInButton.right + 10" metrics:metrics views:views];
[self.view addCompactConstraint:@"preview.height = preview.width / 1.6" metrics:metrics views:views];

或者这样

[self.view addCompactConstraints:@[
    @"emailLabel.left >= emailField.left",
    @"spinner.left = logInButton.right + 10",
    @"preview.height = preview.width / 1.6"
] metrics:metrics views:views];

语法

CompactConstraint 语法直接映射到 NSLayoutConstraint 的内置方法 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: 所传递的参数

leftItem.attribute [= == <= >=] rightItem.attribute [* /] multiplier [+ -] constant

leftItemrightItem 都是来自提供的 views 字典的键,映射到 UIView,就像 Apple 的视觉格式语言调用一样。

rightItem 可能是 "super",这将被解释为 leftItem 的父视图。如果您在 views 中指定了 @"super" 键,则您的提供值将被使用。

multiplierconstant 是可选的。另外,rightItem.attributemultiplierconstant 都可以由提供的 metrics 字典中的条目替换,映射到 NSNumbers。

有效的属性只是 NSLayoutAttribute 定义末尾的以小写字母开头的部分

left
right
top
bottom
leading
trailing
width
height
centerX
centerY
baseline

例如,给定以下字典作为 viewsmetrics 参数

NSDictionary *views = @{
    @"button" : self.button,
    @"label" : self.label,
    @"spinner" : activitySpinner,
};

NSDictionary *metrics = @{
    @"buttonHeight" : @(36),
    @"spacing" : @(15),
    @"scale" : @(1.25),
};

这些都将有效的 CompactConstraint 语法

button.centerX = super.centerX
label.width = button.width * scale + 40
spinner.left = button.right + 10
button.height = buttonHeight
spinner.height = 40

安装

只需将 CompactConstraint 目录中的少数几个文件包含到您的项目中,并在您想要使用它的任何地方(或在预编译头文件中):#import "CompactConstraint.h"

它运行得快吗?

对我来说已经足够快了。试试看它是否对您来说也足够快。