Day4 : 学习使用代码构建AutoLayout

  今天主要优化了项目的添加数据界面,使用VFL语句来构建constraints。VFL语句比较长,而且可读性很差。现在考虑转成使用Masonry来做。下面看看这两种语句的区别:

 

一、VFL语句是这样的:

 

   

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[buttonImage(>=buttonHeight)][tittleField(>=minHeight)][div1(1)][soilField(>=minHeight)][div2(1)][dateField(>=minHeight)]-44-|" options:0 metrics:@{@"buttonHeight":@(kButtonHeight), @"minHeight":@(kJVFieldHeight)} views:NSDictionaryOfVariableBindings(buttonImage, tittleField, div1, soilField, div2, dateField)]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:dateField attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:div3 attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0.0]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:dateField attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:timeField attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0.0]];

 

 

二、Masonry语句是这样的:

 

[buttonImage mas_makeConstraints:^(MASConstraintMaker *make) {

        

        make.height.mas_greaterThanOrEqualTo(kButtonHeight);

        make.left.equalTo(self.view.mas_left);

        make.right.equalTo(self.view.mas_right);

        make.top.equalTo(self.view.mas_top);

        make.bottom.equalTo(tittleField.mas_top);

 

    }];

    

    [tittleField mas_makeConstraints:^(MASConstraintMaker *make) {

        

        make.height.mas_greaterThanOrEqualTo(kJVFieldHeight);

        make.top.equalTo(buttonImage.mas_bottom);

        make.left.equalTo(self.view.mas_left).with.offset(kJVFieldHMargin);

        make.right.equalTo(self.view.mas_right).with.offset(-kJVFieldHMargin);

 

    }];

    

    [div1 mas_makeConstraints:^(MASConstraintMaker *make) {

        

        make.top.equalTo(tittleField.mas_bottom);

        make.left.equalTo(self.view.mas_left);

        make.right.equalTo(self.view.mas_right);

        make.height.mas_equalTo(1);

        

    }];

    

    [soilField mas_makeConstraints:^(MASConstraintMaker *make) {

        

        make.height.mas_greaterThanOrEqualTo(kJVFieldHeight);

        make.top.equalTo(tittleField.mas_bottom);

        make.left.equalTo(self.view.mas_left).with.offset(kJVFieldHMargin);

        make.right.equalTo(self.view.mas_right).with.offset(-kJVFieldHMargin);

        

    }];

 

 

我这个ui写的有点复杂了(界面上的控件比较多),所以Masonry的句子加起来很长。Masronry的语句更接近自然语言,易读性还是要比原生的使用VFL语句强。

 

在研究Masonry的时候,还接触到了cocoaPods,一个强大的第三方库管理。他可以:

1.搜索、下载、导入第三方库,一气呵成。

2.持续的更新第三方库的版本,不需要反复的删除导入。

3.利于团队开发协作。

 

目前在做的项目没有启用cocoaPods,因为他导入第三方库后会生成一个新的xworkspace文件,和原本的文件结构有比较大的区别,所以打算下一项目再使用。

 

 

PS.好吧,这两天不舒服,写博客进度慢了,但是还是按计划做好了,算对得起自己的时间吧。

posted @ 2015-06-08 23:58  埋头写代码  阅读(235)  评论(0)    收藏  举报