华氏 0.2.1

华氏 0.2.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年4月

Griffin Schneider维护。



华氏 0.2.1

  • Griffin Schneider

华氏是一个小型库,它提供了一个更好的 API 来在代码中构建视图层次结构。华氏使用 Masonry 进行自动布局,并在 iOS 和 OSX 上运行。

为了演示,让我们构建一个简单的视图层次结构,包含嵌套在 self.view 里面的 2 个视图。

通常构建层次结构

UIView *view1 = [UIView new];
view1.backgroundColor = [UIColor redColor];
[self.view addSubview:view1]
[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(view1.superview);
}];

UIView *view2 = [UIView new];
view2.backgroundColor = [UIColor blueColor];
[view1 addSubview:view2];
[view2 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(view1);
}];

使用华氏构建层次结构

UIView *view1, *view2;
ºº(self.view) {
    view1 = º(UIView) {
        _.backgroundColor = [UIColor redColor];
        _.make.edges.equalTo(superview);
        view2 = º(UIView) {
            _.backgroundColor = [UIColor blueColor];
            _.make.edges.equalTo(superview);
        };
    };
};

(在 OSX 上按 ⌥-0 可以键入 º)

优势

  • 代码的层次结构与创建的视图层次结构相映射 - 嵌套块直接对应于嵌套的子视图。
  • 更少的重复样板代码 - 不再需要忘记将您的视图添加为子视图。
  • 更少的复制粘贴错误机会 - 由于 _superview 总是绑定到当前视图,因此将行从一个块移动到另一个块时会自动影响其移动到的视图。

高级用法

对每个 º 的调用都将给定的视图添加为子视图,添加到最近调用的嵌套 ººº 中传递的视图。视图的顺序将决定于 º 调用的顺序。

º 的调用必须在 ºº 的调用内部。由于它不嵌套在任何其他调用内,所以 ºº 不会将给定的视图作为子视图添加到任何东西。

º 宏之后的块中,_ 指的是给定的视图,而 superview 指的是该视图的父视图。 _.make 被设置为给定的视图的 MASConstraintMaker,类似于传递给 Masonrymas_makeConstraints: 方法的块。

º 块之后的块将只被执行一次,一旦内部块中所有的其他内容都运行一遍,所以同一层次结构级别分配的所有视图都可以相互引用。例如

ºº(self) {
    UIView *one, *two;
    one = º(UIView) {
        // Even though two is assigned below, it will not be nil here!
        _.make.left.equalTo(two);
    };
    two = º(UIView) {
        // one won't be nil here either.
        _.make.top.equalTo(one);
    };
};

当将实例作为 º 的第一个参数传递时,使用 typeof 来确定实例的类型。在某些情况下,typeof 可能无法确定类型,或者得到的类型过于通用(例如,当你知道它更具体时,它是 id)。如果发生这种情况,你可以自己将实例转换为类型

ºº(self) {
    º((UIButton *)[UIButton buttonWithType:UIButtonTypeCustom]) {
        <... _ now has type UIButton*, even though buttonWithType: returns id ...>
    };
};

安装

华氏度可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中

pod 'Fahrenheit'

如果您不喜欢 ººº 符号(或者您已找到更好的用途),可以配置 Fahrenheit 使用您想要的任何符号。在导入 Fahrenheit 之前,将以下 3 行代码添加到 prefix.pch 中

#define FAHRENHEIT_CUSTOM_MACRO_NAMES
#define f(args...) FAHRENHEIT(args)
#define F(args...) FAHRENHEIT_TOPLEVEL(args)

...现在您可以使用 f 代替 º,以及 F 代替 ºº。您可以将示例中的 fF 替换为您想要的任何标识符。