IOS 可视化格式

一、可视化格式约束介绍:

可视化格式由一个描述视图的文本字符串组成。你根据项出现的顺序依次列出他们。文本序列指定间隔,不等量和优先级。结果将布局形象化地表现为一个简短的文本。
如:
NSLayoutConstraint.constraints(withVisualFormat: "V:[viwe1]-8-[view2]", options: .alignAllLeading, metrics: nil, views: ["view1":view1,"view2":view2])
注意点:

  1. 坐标轴(方向),指定前缀为 H:或者 V:;当忽略时,默认为水平布局。但鼓励使用前缀。
  2. 每个视图的变量名出现在方括号中。如:[View1]
  3. 字符串中视图名称的顺序与布局中视图的请求顺序匹配。一般是从上到下或者从左到右。
  4. 两个视图的固定间隔以一个数字常量的形式出现,如:-8-。连字符围绕着该数字。
  5. 选项参数指定对齐方式。
  6. 度量字典参数(metrics):使用时,该参数为约束中的值代替提供常量数值。
  7. 参数Views并不是传递一个视图数组,它传递一个变量绑定字典。

二、为什么使用可视化格式?

  • 更简洁,一个可视化格式便可表示多个约束才能描述的布局条件。
  • 它更容易检查。可视化格式讲述了一个布局小故事,你可以将注意力集中在更凝练的想法上。
  • 它更容易进行调整,如果你想要更新对齐方式或者调整间隔,只需要修改最后一个间隔。

三、格式字符串结构

遵循语法 : ( < orientation > : ) ? ( < superview > < connection > ) ? < view > ( < connection > < view > ) * ( < connection > < superview > )

3.1 视图名称:

通过一个变量绑定字典来关联视图的名称和视图实例。将该字典传给约束的创建方法,用于在名称和对象的之间建立映射关系。
(注:不可直接通过本地变量字符串)

3.1.1 父视图:

总是一个特殊的字符--------竖线符( | )。仅在格式字符串的开头或者结尾看见它。

无需在字典绑定,AutoLayout会知道“ | ” 是父视图。
样例:

  • 延伸一个视图来适应其父视图:" H : | [ view ] | "
  • 将一个视图偏离它的父视图的某条边:" V : [ view ] - 8 - | "
  • 创建一列或者一行与父视图对齐的视图," V : | - [ view1 ] - [ view2 ] - [ view3 ] | [ view4 ] "

3.2 连接:

连接指定视图间的间隔。

3.2.3 空连接:

视图与视图之间 或者 视图与父视图之间没有指定任何间隔,如:" H : [ view1] [ view2 ] "" V : | [ view1 ] "
使用空连接来放置需要自然的相互毗邻。
(注:其优先级并不很高,若有其他约束会优先其他约束。)

3.2.3 默认间隔:

苹果官方虽未文档化,两个同级视图之间标准间隔为8,子视图到父视图标准间隔为20,这些间隔来源于苹果的Aqua用户标准界面。
" H : [ view1] - [ view2 ] ",表示两个视图的间隔为20。

3.2.3 灵活间隔:

例:" H : | - [ view1] - ( > = 0) - [ view2 ] - | "
即View1和view2的间隔至少为0。
使用一个很小的几何规则,这样就不会无意中干扰到其他的几何规则。
注:(可在()里面添加多个规则如:(>=50,<=100)

3.3 圆括号:

括号将非简单的 正数或者 度量名的间隔区分开来。

  • 必须为任何使用负数值的间隔加上括号。 如: " H : | - [ view1] - (-5) - [ view2 ] - | "

3.4 优先级:

可以通过给格式字符串添加一个可选的值来设置布局请求的优先级。在任何连接或者尺寸规则后拼接一个字符@,@后是一个想要设置优先级的数值。
如:
" H : | - 5 @ 20 - [ view1 ] - [ view2 ] - | "
间隔规则的默认优先级为1000

3.5 视图尺寸:

可视化约束格式语言除了可以用方括号分割视图名称外,还可以在方括号中指定视图尺寸,如:

  • 指定一个视图宽度为固定的120:"H : [ view ( 120 ) ] " 。如果你想显式的添加格式,也可以这样 "H : [ view ( ==120 ) ] "
  • 可以指定视图的宽度至少为50点,如 "H : [ view ( >= 50 ) ] " ,也可以指定视图的宽度在50 - 70之间 " H : [ view ( >= 50, <= 70 ) ] "
  • 可以在尺寸请求中引用其他约束:
    如:“view1(view2)”,使view1和view2的宽度一致。
    注意:因为约束是无方向的,所以可以自我引用。循环定义不会产生性能损失。使用下列语句创建一个相等布局,"V:|-[view1(view2)]-[view2(view1)]-|"
  • 不是所有的视图都要参与视图匹配。“V:|-[view1(<=80)]-[view2]-[view3(view1)]-|”,该格式限制view1和view3,view2伸展时占据剩余空间。
  • 视图尺寸也能表示优先级:**“V:|-[view1(==100@200)]-[view2(==300@500)]-|”*
  • 不能在格式化约束中使用乘数表达相应的尺寸。
3.6 格式字符串部件

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值