iOS用代码让控件自适应布局

很长一段时间都是在xib上直接给控件添加约束来实现自适应布局的。

WeChat_1458303780.jpeg

如上图所示,选中要添加约束的控件,然后点击右下角的这个图标

2.pic.jpg

再根据实际情况设置好后,点击最下面的这个,就成功添加约束了。


WeChat_1458303932.jpeg

一直很好奇如果用代码的方式添加约束是怎么样的,于是今天就尝试使用原生的vfl(原生代码添加约束)和SDAutoLayout(一个很著名的第三方库)来添加约束

一、vfl

/**
 *使用原生AutoLayout代码
 */
UILabel *labelBlack = [[UILabel alloc]init];
labelBlack.backgroundColor = [UIColor blackColor];
[labelBlack setTranslatesAutoresizingMaskIntoConstraints:NO];

[self.view addSubview:labelBlack];

NSDictionary *dic = @{
                      @"labelBlack":labelBlack
                      };

NSString *vfl = @"V:|-25-[labelBlack(80)]";
NSString *vfl1 = @"H:|-25-[labelBlack(80)]";

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl options:0 metrics:nil views:dic]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl1 options:0 metrics:nil views:dic]];

上图字符串vfl中的V表示纵向坐标,H表示横向坐标,|表示父视图的边界,小括号里面表示宽度和高度,中括号表示控件字典中对应的key,然后把约束添加上去就实现了让labelBlack距离父视图顶部25,距离父视图左边25,宽和高都是80,效果如下图


WeChat_1458305169.jpeg

二、SDAutoLayout
首先需要把SDAutoLayout pod到项目中,然后在需要使用到的文件顶部#import "UIView+SDAutoLayout.h"就可以使用了。

/**
 *使用SDAutoLayout
 */
UILabel *labelBlue = [[UILabel alloc]init];      
labelBlue.backgroundColor = [UIColor blueColor];

 [self.view addSubview:labelBlue];
    
labelBlue.sd_layout.rightSpaceToView(self.view,25).topSpaceToView(self.view,25).widthIs(80).heightIs(80);

如上图所示,代码的意思清晰明了,轻松实现让labelBlue距离父视图顶部25,右边距25,宽和高都是80的效果

WeChat_1458306622.jpeg

这篇文章其实是起抛砖引玉的作用,满足我好奇心的同时也把探索的这份愉悦分享给大家

对vfl感兴趣的可以去查阅官方文档和看有关的介绍
对SDAutoLayout感兴趣的可以上github学习更多的用法

有不明白的地方可在下方留言,互相学习交流

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

推荐阅读更多精彩内容

  • 翻译自“Auto Layout Guide”。 1 入门 1.1 理解自动布局 自动布局根据视图层级结构中视图上的...
    lakerszhy阅读 3,722评论 3 26
  • 目录 0、前言 一、Auto Layout前世今生 二、Auto Layout基础知识 1.Auto Layout...
    浮游lb阅读 24,963评论 3 90
  • 翻译自“Auto Layout Guide”。 2 自动布局细则手册 2.1 堆栈视图 接下来的章节展示了如何使用...
    lakerszhy阅读 1,903评论 3 9
  • 1.关于音乐的描述(有色彩、有温度,更有感情) 旋律里流淌着夕阳的光芒,不是炽热,而是温暖。 在叙述的明暗之间,坐...
    潘志峰阅读 791评论 0 0
  • 早晨的天空中 微冷的东风里 飘起了春雨 田野里金黄一片片 翠绿一片片 清亮清亮的水田, 三月的垂杨柳 舞弄着细雨微...
    丁_香阅读 510评论 57 38