IOS AutoLayout 代码实现约束—VFL
在autolayout下,尽管使用IB来拖放控件,但仍然避免不了用代码来创建控件,这是约束需要代码来实现。
IOS 提供了两种添加约束的方法
第一种:
+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
第二种:
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
第一种方法返回的是一个约束对象,也就是一条约束。看参数也比较好理解,就是在view1与view2之间设定一条约束,但往往一个控件需要好几条约束来约束,加上如此长的方法,所以导致一个控件就需要大量的代码来实现约束。
第二种方法返回的是array,包含的是一组约束,所以一般一个控件,调用两次第二种方法就能实现约束。所以这种方法更加的简洁,但是这种方法用到的是一种描述性语言,有点不好理解,下面就来简单介绍下第二种方法的用法。
先对这些参数进行说明:
(NSDictionary*)views:表示这组约束所涉及到的相关子view,比如一个界面上有 A、B两个控件,这组约束涉及到了这两个控件,那么就以字典类型将A、B控件设为参数views,可以用NSDictionaryOfVariableBindings(A, B) 等效于 [NSDictionary dictionaryWithObjectsAndKeys:A @“A”, B, @“B'', nil];
(NSDictionary*)metrics:对于一些特定的宽、高,我们可以直接存放在字典中,这样在描述性语言中就可以直接用键来描述宽高。如:
NSDictionary *metrics = @{@"buttonWidth":@200.0};
(NSLayoutFormatOptions) opts:见枚举类型,解释部分。
常用的就这些:
NSLayoutFormatAlignAllLeft//控件之间左对齐
NSLayoutFormatAlignAllRight//控件之间右对齐
NSLayoutFormatAlignAllTop//...上对齐
NSLayoutFormatAlignAllBottom//...下对齐
NSLayoutFormatAlignAllLeading // 使所有视图根据当前区域文字开始的边缘对齐(英语:左边,希伯来语:右边)
NSLayoutFormatAlignAllTrailing // 使所有视图根据当前区域文字结束的边缘对齐(英语:右边,希伯来语:左边)。
NSLayoutFormatAlignAllCenterX // 使所有视图通过设置中心点的 X 值彼此相等来对齐。
(NSString*)format 这就是核心VFL语句了,举例说明(H表示水平方向,V表示垂直方向)
H:|-[view]-| //view与superview的左右边界为标准间距
H:|-[view] //view与superview的左边界为标准间距,右边不处理
H:|[view] //view与superview的左边界对齐,右边不处理
H:|-20.0-[view]-30.0f-| //view与superview的左边边界间距分别为20,和30
H:[view(100.0)] //view宽度为100
H:|-[button1(button2)]-[button2]-| //button1与button2等宽,之间为标准间距.....
V:|-20.0-[view(30.0)] //view距顶部边界20,自身高度为30.0
//注意:在写两个控件左右边距或者上下边距的时候,控件输写的顺序请按照UI界面的顺序写。
也就是说@“H:[_nameTextField]-20-[button]”表示_nameTextfield与button之间的间距为20,_nameTextField在左边,button在右边;
@“H:[button]-20-[_nameTextField]”表示button与_nametextField之间的距离为20,button在左边,_nameTextField在右边。
//注意:在写两个控件之间的距离时,左右两边不能加两个||
为了实现约束,我们只需要先初始化这些控件,但在autolayout中不需要用alloc来初始化,而且要关掉autoresizing constraints
UIView *view = [self new];
view.translatesAutoresizingMaskIntoConstraints = NO;
PS:Demo还在整理过程中,整理好了马上上传。
IOS AutoLayout 代码实现约束—VFL的更多相关文章
- 【转】iOS学习之Autolayout(代码添加约束) -- 不错不错
原文网址:http://www.cnblogs.com/HypeCheng/articles/4192154.html DECEMBER 07, 2013 学习资料 文章 Beginning Auto ...
- IOS AutoLayout 遍历修改约束
self.cvv2View.hidden = YES; self.periodView.hidden = YES; [self.contentView.constraints enumerateObj ...
- iOS autolayout 代码,自定义间距
最近换了新的项目组,然后这个项目组是纯代码,然后我就开始试着用代码去写适配,结果学艺不精,遇到个闪退,搜了一下发现几乎没有人遇到这个问题,后来发现其实就是我自己太粗心了. 我是这样写的 NSArray ...
- iOS 使用代码创建约束,实现自动布局
///与下面约束对象属性截图相对应//使用Auto Layout约束,禁止将Autoresizing Mask转换为约束 [self.funcView setTranslatesAutoresizin ...
- 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)
转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...
- iOS: 在代码中使用Autolayout (2) – intrinsicContentSize和Content Hugging Priority【转】
原文:http://www.mgenware.com/blog/?p=491 接上文:iOS: 在代码中使用Autolayout (1) – 按比例缩放和优先级. 我们继续来看在代码中使用Autola ...
- 从此爱上iOS Autolayout
转:从此爱上iOS Autolayout 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程 ...
- iOS - AutoLayout
前言 NS_CLASS_AVAILABLE_IOS(6_0) @interface NSLayoutConstraint : NSObject @available(iOS 6.0, *) publi ...
- 【转】iOS6中的Auto Layout:通过代码添加约束
最近做的项目用到了Auto Layout,于是经过了一番大量的google,这是我看到的讲用代码创建约束最清晰的一篇教程,于是想跟更多的人分享一下.原文也比较简单,可以直接过去看,如果我翻译的 ...
随机推荐
- iOS开发 检测版本更新
iOS开发 检测版本更新的实现 苹果给了我们一个接口,能根据应用id请求一些关于应用的信息.我们可以根据返回的信息,来判断版本是否和应用的版本一致,如果不一致,那么就出现新的版本了.这时,就需要向用户 ...
- odoo写邮件添加收件人
在任何可以写消息的地方点击鼠标 或者回复消息 写消息的框会聚焦并变大 点击撰写框右上角的弹出窗图标 弹出完整的撰写消息窗口 在红色的地方添加收件 ...
- [LeetCode][Java] Longest Common Prefix
题目: Write a function to find the longest common prefix string amongst an array of strings. 题意: 写出一个函 ...
- string方法 PadLeft 返回一个新字符串,该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符右对齐。 PadRight 右边
- C#高级编程六十九天----DLR简介 .在.NET中使用DLR(转载) 我也来说说Dynamic
DLR 一.近年来,在TIOBE公司每个月发布的编程语言排行榜中,C#总是能挤进前十名,而在最近十年来,C#总体上呈现上升的趋势.C#能取得这样的成绩,有很多因素,其中它在语言特性上的锐意进取让人印象 ...
- wxWidgets刚開始学习的人导引(6)——wxWidgets学习材料清单
wxWidgets刚開始学习的人导引全文件夹 PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wx ...
- 拒绝干扰 解决Wi-Fi的最大问题
本文转载至:http://www.ciotimes.com/net/rdjs/WI-FI/201006301920.html 射频干扰英文:RFI,(Radio Frequency Interfere ...
- LeetCode题解(19)--Remove Nth Node From End of List
https://leetcode.com/problems/remove-nth-node-from-end-of-list/ 原题: Given a linked list, remove the ...
- Hadoop每日一讨论整理版
这是我在几个QQ群发起的Hadoop每日一讨论小活动,每天中午2点左右发出一个关于Hadoop的知识片段,在此做一个整理. [每日一讨论]之计算框架(2013-5-21) 就计算框架而言,Hadoop ...
- AptitudeSystem 2.0
AptitudeSystem 2.0(2017-03-07) 描写叙述:Windows内核研究辅助工具 支持的系统:Windows 7.Windows 8.Windows 8.1.Windows 10 ...