当前位置: 首页 > news >正文

(八十八)VFL语言初步 - 实现布局

【基本的语法】

VFL的语法为H:和V:开头。代表水平和垂直。

接下来假设要涉及距离。使用|-x-,x为距离的点数。

对于视图。用[ ]包围,比如[blueView]。

①以下的语句实现了blueView水平方向左右各距离控制器的边缘20点:

H:|-20-[blueView]-20|

②假设要指定宽高,在视图名称之后用圆括号内填入常量数值,以下的代码实现了blueView距离左边20点,宽度固定为120点:

H:|-20-[blueView(20)]

③假设要指定相等关系,比如redView的宽度和blueView相等,则在开头为H:的条件下写[redView(==blueView)]。

④假设出现乘除计算,不能使用VFL,这时候应该使用NSLayoutConstraint的constraintWithItem:::::方法,计算公式为firstItem.x = (secondItem.x + constant) * multiplier,x为attribute指定的计算量。注意这个约束应该被加入到他们公共的父节点上。

【实现方法】

使用constraintsWithVisualFormat::::方法:

/**
     Format: VFL语句
     options:对齐方式
     metrics:VFL用到的变量
     views:VFL用到的视图
*/
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;


①假设不须要对齐,options填入0。

②views为在VFL中相应实际View的根据,比如@{@"redView":self.redView},当VFL中出现redView时。系统会通过views字典查找到self.redView,从而实现改动self.redView的尺寸。

③metrics为VFL中使用的变量。对于多次出现的值。能够用一个变量取代,然后在metrics中指定变量的值。


【实例】

以下的代码实现了blueView距离控制器View边缘左、中、右各20点,redView在blueView下20点,右对齐。宽度为blueView的一半。

须要注意的是禁用AutoResizing。

- (void)viewDidLoad {
    
    [super viewDidLoad];

    UIView *blueView = [[UIView alloc] init];
    blueView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:blueView];
    
    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
    blueView.translatesAutoresizingMaskIntoConstraints = NO;
    redView.translatesAutoresizingMaskIntoConstraints = NO;
    
    NSArray *blueViewHori = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[blueView]-20-|" options:0 metrics:nil views:@{@"blueView":blueView}];
    [self.view addConstraints:blueViewHori];
    NSArray *blueRedVerti = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[blueView(50)]-20-[redView(==blueView)]" options:NSLayoutFormatAlignAllRight metrics:nil views:@{@"blueView":blueView,@"redView":redView}];
    [self.view addConstraints:blueRedVerti];
    
    NSLayoutConstraint *redViewWidthConstraint = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0];
    [self.view addConstraint:redViewWidthConstraint];
    
    
}


相关文章:

  • js中包含中文注释引起的错误
  • CSS3选择器:nth-child与:nth-of-type区别
  • 数据集成在ODS项目的应用模式
  • hadoop无法启动DataNode问题
  • 解决ajax.net 1.0中文乱码问题
  • 如何动态添加菜单/菜单项、子菜单、右键菜单
  • java泛型中?和T区别
  • 介绍一款开源的正则表达式测试工具-Regex Tester
  • Asp.Net中CS中获取物理路径
  • npm 安装
  • Delphi 与 DirectX 之 DelphiX(50): TDIB.DoLightness();
  • 小型企业局域网免费上网行为管理方案
  • docker~Dockerfile方式建立镜像HelloWorld
  • jQuery for Asp.Net 一步一步从入门到精通(附 jQuery API 彩色大图)
  • 最新如何解决git 输入github时每次都要输入用户名和密码问题
  • 《剑指offer》分解让复杂问题更简单
  • 【技术性】Search知识
  • 30秒的PHP代码片段(1)数组 - Array
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • JavaScript服务器推送技术之 WebSocket
  • jquery cookie
  • Mithril.js 入门介绍
  • mysql_config not found
  • MySQL数据库运维之数据恢复
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • windows-nginx-https-本地配置
  • 编写符合Python风格的对象
  • 从输入URL到页面加载发生了什么
  • 翻译:Hystrix - How To Use
  • 前端面试之CSS3新特性
  • 温故知新之javascript面向对象
  • 小程序开发之路(一)
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 字符串匹配基础上
  • linux 淘宝开源监控工具tsar
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​iOS实时查看App运行日志
  • ​MySQL主从复制一致性检测
  • #Lua:Lua调用C++生成的DLL库
  • (4)logging(日志模块)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (pojstep1.1.2)2654(直叙式模拟)
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!