AutoLayout - VFL
V: -> 竖直方向;
[aaa] -> views参数中key值为aaa的view控件;
| -> 父视图的边界;
>=,==,<= -> 关系;
- -> 间隔,当设置30的间隔时为 -30- ,不设置时会显示默认间隔;而当使用matrics来设置数值时,30这个数值也可以直接使用matrics中设置的key值;
第一个"|"表示左边距,"-10-"表示距左边距10像素,"[aView(60)]"表示aView对应的控件宽度为60,"-40-"表示aView和bView的间隔为40,"-30-"则表示距离右边距30,其中,bView并未设置宽度,会有已有条件剩余的部分作为宽度来显示;
V:|[aView(>=60@900)]-50-[bView(>=400@899)]-30@901-|
self.view.backgroundColor = UIColor.greenColor() let superView = UIView(frame: CGRect(x: , y: , width: , height: ))
superView.backgroundColor = UIColor.blueColor()
self.view.addSubview(superView) let label_01 = UILabel()
label_01.text = "label_01"
label_01.backgroundColor = UIColor.redColor()
superView.addSubview(label_01) let label_02 = UILabel()
label_02.text = "label_02"
label_02.backgroundColor = UIColor.grayColor()
superView.addSubview(label_02) let label_03 = UILabel()
label_03.text = "label_03"
label_03.backgroundColor = UIColor.brownColor()
superView.addSubview(label_03) let label_04 = UILabel()
label_04.text = "label_04"
label_04.backgroundColor = UIColor.cyanColor()
superView.addSubview(label_04) label_01.translatesAutoresizingMaskIntoConstraints = false
label_02.translatesAutoresizingMaskIntoConstraints = false
label_03.translatesAutoresizingMaskIntoConstraints = false
label_04.translatesAutoresizingMaskIntoConstraints = false //当屏宽大于两个按钮的宽度时,两个按钮的间隔的优先级会降低;
//使用AlignAllLeft会提示Options mask required views to be aligned on a horizontal edge, which is not allowed for layout that is also horizontal.; 也就是说当我写水平方向时的布局时,其实只能使用水平相关的NSLayoutFormatOptions限定,否则会因为VFL语句解析出错;
//设置了左右边距、间隔与宽度;则左右边距和宽度优先;
let hVFL = "H:|-10-[label_01(60)]-40-[label_02]-30-|"
let hCons = NSLayoutConstraint.constraintsWithVisualFormat(hVFL, options: NSLayoutFormatOptions.AlignAllTop, metrics: nil, views: ["label_01":label_01, "label_02":label_02])
superView.addConstraints(hCons) let vVFL1 = "V:|-80-[label_01]"
let vCons1 = NSLayoutConstraint.constraintsWithVisualFormat(vVFL1, options: NSLayoutFormatOptions.AlignAllTop, metrics: nil, views: ["label_01":label_01, "label_02":label_02])
superView.addConstraints(vCons1) //水平方向如果指定了上边距与下边距 和高度 则以上边距和高度为优先;
//水平方向只是简单居中
let hVFL2 = "H:|-[label_03]-|"
let hCons2 = NSLayoutConstraint.constraintsWithVisualFormat(hVFL2, options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["label_03":label_03])
superView.addConstraints(hCons2) let hVFL3 = "H:|-[label_04(==label_03)]-|"
let hCons3 = NSLayoutConstraint.constraintsWithVisualFormat(hVFL3, options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["label_03":label_03, "label_04":label_04])
superView.addConstraints(hCons3) let vVFL3 = "V:|[label_03(>=60@900)]-50-[label_04(>=400@899)]-30@901-|"
let vCons3 = NSLayoutConstraint.constraintsWithVisualFormat(vVFL3, options: NSLayoutFormatOptions.AlignAllLeft, metrics: nil, views: ["label_03":label_03, "label_04":label_04])
superView.addConstraints(vCons3)
______________________________________________________________________________________________________________ 12.15补充:
其实如果一个布局中使用VFL,不可避免的整个布局约束的语句甚至比布局还要多,因为要对不同的布局关系进行处理和限制,而涉及到动态修改就会更加麻烦;在我的项目中,很少再用到VFL了,但是有些场景不得不说VFL更方便;如今,我的做法是扩展了UIView的方法,用一些基本的方法做布局,虽然理论上还是使用frame进行的,但是如果能够有一个清晰的视图层次和便于使用的分类方法,即便是很复杂的设计图,也可以很清晰的进行排布,因为注释以及策略选用得当,一者维护起来也并不会困难,二者仍能够适配各种机型,最主要我不需要去写很多的约束代码,以及去备注各个相关约束间的关系; 但自动布局也并不是就毫无用武之地,怎么说呢,这个应该是哪一种使用更加熟练,哪一种就更为适用,当然是以维护和满足设计要求的前提下。
AutoLayout - VFL的更多相关文章
- iOS 进阶 第二十一天(0531)
0531 - Autolayout 不仅可以做屏幕适配还可以做系统适配 uidynamic 做物理动画.能做的效果如下图: Autolayout Autolayout 是一种“自动布局”技术,专门用来 ...
- QF——网络之知识碎片
1.URL中文问题: URL不支持中文.若出现中文,需要对URL进行utf-8编码. NSString *urlString = [kULRSTRING stringByAddingPercentEs ...
- Masonry1.0.2 源码解析
在了解Masonry框架之前,有必要先了解一下自动布局的概念.在iOS6之前,UI布局的方式是通过frame属性和Autoresizing来完成的,而在iOS6之后,苹果公司推出了AutoLayout ...
- 【原】iOS学习之苹果原生代码实现Autolayout和VFL语言
1.添加约束的规则 在创建约束之后,需要将其添加到作用的view上 在添加时要注意目标view需要遵循以下规则: 1)对于 两个同层级view之间 的约束关系,添加到它们的父view上 2)对于 两个 ...
- Autolayout(VFL)
Autolayout(VFL) 1.NSLayoutConstraint + (NSArray *)constraintsWithVisualFormat:(NSString *)format opt ...
- Autolayout及VFL经验分享
http://www.cocoachina.com/industry/20131108/7322.html 这篇不是什么教程.Cocoa autolayout出来蛮久了.以前多次想去深入研究一下,每次 ...
- iOS开发-VFL(Visual format language)和Autolayout
AutoLayout不管是在StoryBorad还是在xib中都相对来说比较简单,VFL(Visual fromat language)可视化语言基本上用到的比较少,在xCode4时候自动布局的概 ...
- AutoLayout自动布局之VFL语言代码实现(一个神奇的语言)
一.什么是VFL语言?为什么要VFL语言? VFL全称是Visual Format Language,翻译过来是“可视化格式语言” VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 ...
- Autolayout和VFL
Autolayout,開始于iOS6.0 一.什么时候用autolayout比較适合 1.不负责任的骑墙派说法:apple的设备越来越多了,你的应用应该都使用al. (而且用sb) 2.要 ...
随机推荐
- [html]经验集
禁止默认的右键菜单: window.document.oncontextmenu = function(){ return false;} WebBrowser 控件用法:(手动填充内容) // 首先 ...
- android隐藏底部虚拟键Navigation Bar实现全屏
隐藏底部虚拟键Navigation Bar实现全屏有两种情况 第一种:始终隐藏,触摸屏幕时也不出现 解决办法:同时设置以下两个参数 View.SYSTEM_UI_FLAG_HIDE_NAVIGATIO ...
- 关于JS 事件冒泡和onclick,click,on()事件触发顺序
今天在给JQgrid中的标签添加click事件的时候,发现一个问题. JQgrid的table中,点击任何位置,都会勾选点击行的checkbox,而我希望在点击我的标签的时候,不要勾选checkbox ...
- RPC学习--C#使用Thrift简介,C#客户端和Java服务端相互交互
本文主要介绍两部分内容: C#中使用Thrift简介 用Java创建一个服务端,用C#创建一个客户端通过thrift与其交互. 用纯C#实现Client和Server C#服务端,Java客户端 其中 ...
- 转js中this指向的简明解答
JS中的this对象详解 JS中this关键字很常见,但是它似乎变幻莫测,让人抓狂.这篇文章就来揭示其中的奥秘. 借助阮一峰老师的话:它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用. ...
- git 调用 Beyond Compare
转载自 http://www.jackness.org/2015/03/31/git-%E8%B0%83%E7%94%A8-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%AF%B9% ...
- 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册
<Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...
- XAF学习笔记1
写软件很多年了.看过的框架用过的框架非常多.一直想要一种框架,说不出的心烦重复的数据库设计,重复的Model生成,重复的界面设计 一直寻寻觅觅,终于找到一个框架,DEV的XAF,DEV控件用了N年了, ...
- arch linux 安装 之 ---GPT--引导篇
新入一二手X240 ,直接格式化,装archLinux. 一.引导程序安装--------------- 1.首先搞清楚什么是UEFI Under UEFI下的引导顺序 System switched ...
- oracle flashback功能
2). 检查Flashback 功能, 缺省时功能是关闭的. SQL> select name, current_scn, flashback_on from v$database; NAME ...