● 什么是VFL语言
● VFL全称是Visual Format Language,翻译过来是“可视化格式语言” ● VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言

VFL示例

● H:[cancelButton(72)]-12-[acceptButton(50)]
● canelButton宽72,acceptButton宽50,它们之间间距12

● H:[wideView(>=60@700)]
● wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)

● V:[redBox]-[yellowBox(==redBox)]
● 竖直方向上,先有一个redBox,其下方紧接一个高度等于redBox高度的yellowBox

● H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|

● 水平方向上,Find距离父view左边缘默认间隔宽度,之后是FindNext距离Find间隔默认宽度; 再之后是宽度不小于20的FindField,它和FindNext以及父view右边缘的间距都是默认宽度。 (竖线“|” 表示superview的边缘)

VFL的使用

● 使用VFL来创建约束数组

+ (NSArray *)constraintsWithVisualFormat:(NSString
*)format options:(NSLayoutFormatOptions)opts metrics: (NSDictionary *)metrics views:(NSDictionary *)views; 

● format :VFL语句
● opts :约束类型(一般可以传0)
● metrics :VFL语句中用到的具体数值 ● views :VFL语句中用到的控件

● 创建一个字典(内部包含VFL语句中用到的控件)的快捷宏定义 NSDictionaryOfVariableBindings(...)

#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 1.添加两个控件到父控件上// 1.1添加蓝色ViewUIView *blueView = [[UIView alloc] init];blueView.backgroundColor = [UIColor blueColor];[self.view addSubview:blueView];// 1.1添加红色ViewUIView *redView = [[UIView alloc] init];redView.backgroundColor = [UIColor redColor];[self.view addSubview:redView];// 2.禁用auturezingblueView.translatesAutoresizingMaskIntoConstraints = NO;redView.translatesAutoresizingMaskIntoConstraints = NO;// 3.添加约束/*lFormat : VFL语句options: 对齐方式metrics: VFL语句中用到的变量值views: VFL语句中用到的控件*/// 设置蓝色View距离左边和右边有20的的间距  X 和 宽度
//    NSArray *blueViewH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[blueView]-20-|" options:0 metrics:nil views:@{@"blueView" : blueView}];int margin = 20;NSArray *blueViewH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-margin-[blueView]-margin-|" options:0 metrics:@{@"margin": @(margin)} views:@{@"blueView" : blueView}];[self.view addConstraints:blueViewH];// 设置蓝色View距离顶部有20的间距, 并且高度等于50   Y 和高度// 设置红色View距离蓝色底部有20的间距, 并且红色View的高度等于蓝色View的高度 Y 和高度// 并且设置红色和蓝色右对齐NSArray *blueViewV = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[blueView(50)]-20-[redView(==blueView)]" options:NSLayoutFormatAlignAllRight metrics:nil views:@{@"blueView" : blueView, @"redView": redView}];[self.view addConstraints:blueViewV];// 注意: 在VFL语句中, 是不支持乘除法
//    NSArray *redVeiwH = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[redView(==blueView )]" options:0 metrics:nil views:@{@"blueView" : blueView, @"redView": redView}];
//    [self.view addConstraints:redVeiwH];
    NSLayoutConstraint *redVeiwW = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0];[self.view addConstraint:redVeiwW];
}@end

基于Autolayout的动画

● 在修改了约束之后,只要执行下面代码,就能做动画效果 [UIView animateWithDuration:1.0 animations:^{

[添加了约束的view layoutIfNeeded];

}];

转载于:https://www.cnblogs.com/liuwj/p/6864176.html

IOS VFL语言(页面布局)相关推荐

  1. Redesign Your App for iOS 7 之 页面布局

    前言 iOS7是目前iOS史上最颠覆的一次改版. 它的出现令人兴奋,因为它将会带我们进入一个全新的时代: 它的到来也让我们忧心,因为它颠覆了一切,包括我们过去做过的很多努力. 但是,相信大家乐意为这个 ...

  2. IOS应用管理学习,进阶,涉及字典转模型,工厂方法,面向对象思想,页面布局等

    IOS应用管理学习,进阶,涉及字典转模型,工厂方法,面向对象思想,页面布局等 前言:人为规定的参数 每一个 小view视图 宽度 80 高度 90 数据类型 CGFloat 定义, 3 列,数据类型 ...

  3. iOS之页面布局-踩坑的原由

    iOS之页面布局 原文请点击 在<iOS 7 UI Transition Guide>中有在<iOS 7 UI Transition Guide>的Bar and Bar Bu ...

  4. android界面布局错位,IOS 浏览器页面布局错位(如:点不到)的分析与解决

    IOS 浏览器页面布局错位(如:点不到)的分析与解决 IOS 浏览器软键盘的拉起与收缩.微信 IOS 浏览器底部导航条的显示与隐藏,很容易导致页面布局错位(相对窗体的绝对定位元素): 明明按钮在这里, ...

  5. html布局语言,HTML基础语言(四)-HTML页面布局

    HTML 布局 今天写一下简单的HTML页面布局 网页布局对改善网站的外观非常重要. 所以请慎重设计您的网页布局. 网站布局大多数网站可以使用 或者 虽然我们可以使用HTML table标签来设计出漂 ...

  6. web标准,表现与数据分离,web语义化,页面布局和架构

    目录 目录 web标准 结构层标准,就是W3C规定的那样: 表现层标准: 行为层标准: 表现与数据分离: web语义化 在广义方面 在代码编译方面 页面布局和架构 布局 架构 开发人员会有一些困惑: ...

  7. iOS开发~UI布局(三)深入理解autolayout

    一.概要 通过对iOS8界面布局的学习和总结,发现autolayout才是主角,autolayout是iOS6引入的新特性,当时还粗浅的学习了下,可是没有真正应用到项目中.随着iOS设备尺寸逐渐碎片化 ...

  8. xml信息管理系统_WPF信息管理系统项目实战教程二:使用XAML实现页面布局

    首页面布局设计 XAML(Extensible Application Markup Language),可扩展应用程序标记语言的使用使得C#桌面应用程序开发前后端实现真正分离.前端人员可使用该标记语 ...

  9. 深度解析使用CSS单位px、em、rem、vh、vw、vmin、vmax实现页面布局

    1.px:绝对单位,页面按精确像素展示 2.em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值. em ...

  10. SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架

    一.SiteMesh项目简介 OS(OpenSymphony)的SiteMesh是一个用来在JSP中实现页面布局和装饰(layout and decoration) 的框架组件,能够帮助网站开发人员较 ...

最新文章

  1. 从蜘蛛网到物联网 这张网人类织了多久?
  2. 水平分库分表的关键步骤和技术难点,分库分表的几种常见玩法及如何解决跨库查询等问题...
  3. 工厂模式一之简单工厂
  4. 如何修改CSDN博客的标题?
  5. gitlab 目录tag_【环境搭建】gitlab-ci(持续集成)
  6. 【数据结构与算法】之深入解析“石子游戏VII”的求解思路与算法示例
  7. 洛谷 - P1036 选数(递归)
  8. 解决Lync2010错误:无法同步通讯簿信息
  9. python os库使用
  10. 查询工资最低的3名员工的职工工号、姓名和收入_工资条6个常识必须掌握,事关你的权益!...
  11. php 发帖代码,我的论坛源代码(四)_php
  12. vivadohlsdsp_FPGA硬件加速学习vivado hls-----------------卷积加速
  13. STM32/STM32L151 RTC唤醒低功耗STOP(停机模式)
  14. win10下虚拟机VMware极简安装PhoenixOS
  15. 【Driver Booster 9 PRO】 驱动更新工具 提升游戏性能
  16. vue中头像加载不出来,怎样设置默认头像
  17. 自己忙碌十年,发现空空的,该填满了
  18. 为什么达芬奇能“艺工结合”,要从“T型设计”说起
  19. 服务器(CentOS7)配置R以及R Studio Server
  20. ZW32-12型户外柱上高压真空断路器

热门文章

  1. (4)回归决策树_预测波士顿房价
  2. MATLAB 创建不定长数组
  3. java 并发容器类实验_Java多线程并发编程中并发容器第二篇之List的并发类讲解...
  4. Java Greedy Snake, need to be updated
  5. oracle rollup 排序,oracle分组函数之ROLLUP演示
  6. unantu下的tmp文件夹_纯干货:Linux各文件夹结构说明及用途介绍
  7. mysql修改max_binlog_cache_size
  8. R-FCN算法及Caffe代码详解
  9. 计算机视觉方面的数据集收藏(CV Datasets on the web)
  10. PriorityQueue优先队列