Autolayout、VFL、Masonry的简单使用

Autolayout、VFL、Masonry的简单使用

本文将通过多种方式实现同一个例子(设置TableVellCell中的TextField加左右边距各25,高度30,垂直居中),最终显示效果如图。

最终效果图

公用代码

self.tagTitle = [[UITextField alloc]init];
[self.tagTitle setEnabled:NO];
[self.tagTitle setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.contentView addSubview:self.tagTitle];

Autolayout

Interface Builder实现
pic1.gif
代码实现
[self.contentView addConstraints:
@[
//设置左边距25
[NSLayoutConstraint constraintWithItem:self.tagTitle
                             attribute:NSLayoutAttributeLeading
                             relatedBy:NSLayoutRelationEqual
                                toItem:self.contentView
                             attribute:NSLayoutAttributeLeading
                            multiplier:1.0 constant:25],
//设置右边距25
[NSLayoutConstraint constraintWithItem:self.tagTitle
                             attribute:NSLayoutAttributeTrailing
                             relatedBy:NSLayoutRelationEqual
                                toItem:self.contentView
                             attribute:NSLayoutAttributeTrailing
                            multiplier:1.0 constant:-25],
//设置高度30
[NSLayoutConstraint constraintWithItem:self.tagTitle
                             attribute:NSLayoutAttributeHeight
                             relatedBy:NSLayoutRelationEqual
                                toItem:nil
                             attribute:NSLayoutAttributeNotAnAttribute
                            multiplier:0.0 constant:30],
//设置垂直居中
[NSLayoutConstraint constraintWithItem:self.tagTitle
                             attribute:NSLayoutAttributeCenterY
                             relatedBy:NSLayoutRelationEqual
                                toItem:self.contentView
                             attribute:NSLayoutAttributeCenterY
                            multiplier:1 constant:0]
]];

VFL

NSDictionary *dic = NSDictionaryOfVariableBindings(_tagTitle);
NSString *vflh= @"H:|-25-[_tagTitle]-25-|";
NSString *vflv= @"V:[_tagTitle(30)]";

//设置左右边距25
[self.contentView addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:vflh options:0 metrics:nil views:dic]
  ];
//设置高度30
 [self.contentView addConstraints:
 [NSLayoutConstraint constraintsWithVisualFormat:vflv options:0 metrics:nil views:dic]
 ];
//设置垂直居中
[self.contentView addConstraint:
 [NSLayoutConstraint constraintWithItem:self.tagTitle
                              attribute:NSLayoutAttributeCenterY
                              relatedBy:NSLayoutRelationEqual
                                 toItem:self.contentView
                              attribute:NSLayoutAttributeCenterY
                             multiplier:1 constant:0]];

Masonry

[self.tagTitle makeConstraints:^(MASConstraintMaker *make) {
    make.leading.equalTo(@25);
    make.trailing.equalTo(@(-25));
    make.height.equalTo(@30);
    make.centerY.equalTo(self.contentView.centerY);
}];

总结

从方便的角度来说,果然还是Interface Builder最为简便,但是它又是出了名的难以协同操作,所以使用的时候需要谨慎。

Autolayout自带添加约束的方法,功能强大而又啰嗦。VFL简洁却功能缺失(多次尝试,无法实现垂直居中的功能)。在使用过程中都没有一个良好的体验。

最后引入的Masonry第三方库,在使用中极大的减少了代码添加约束的篇幅,同时代码易于阅读,名副其实的好用。

00000005

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,191评论 4 61
  • 每个人都有这样的经验: 当父母和你沟通时,你很不耐烦; 当你和孩子沟通时,他很不耐烦; 当你试图和别人讲道理时,通...
    韩同志阅读 3,318评论 0 2
  • 为了积极倡导初中同学20年聚会的成行,我曾经写了段话:’20年前电话很少,重要的事情联络只能通过昂贵的电报,现在我...
    平选2015阅读 1,930评论 0 0
  • 520的IW已经结束快要一周了,一周前还在忐忑,这33小时到底会发生什么呢。而现在,五天过去了,我终于可以提起笔来...
    Summer961019阅读 2,849评论 0 0
  • fdlso阅读 1,118评论 0 0