博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS VFL语言
阅读量:4290 次
发布时间:2019-05-27

本文共 2704 字,大约阅读时间需要 9 分钟。

 语法:

H:[cancelButton(72)]-12-[acceptButton(50)]cancelButton宽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左边缘间隔10,之后是FindNext距离Find间隔默认宽度;再之后是宽度不小于20的FindField,它和FindNext以及父view右边边缘的间距都是默认宽度。(竖线“|”表示superview的边缘)。

  • constraintsWithVisualFormat:这个方法返回了一个数组;
  • @"H:|-20-[blueView(100)]-20-|":这句话表明所添加的约束,H的意思是水平方向添加约束,blueView 视图名称,(100)代表着blueView 的宽为100blueView距离父类的左边20,距离父类的右边是20;
  • options:是对其方式;
  • metrics:返回的是一个字典,它的意思是可以将约束中的值用某些字符串来代理,然后在这个字典中给多对应的字符串赋值,方便修改,并且增加可读性;
  • views:返回的也是一个字典,这个字典的意思是:你可以将前面的view用其他字符串来代替,在这里在给他赋给对应的view的名字。
我可以将上面的约束语句改成如下这样:
NSArray *blueHArr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-aa-[cccc(100)]-20-|"options:kNilOptionsmetrics:@{
@"aa":@20}views:@{
@"cccc":blueView}];
  • 这里我用aa替换了20,cccc替换了blueVuew
举例:
NSString *hVFL = @"H:|-30-[blueView]-30-[redView(==blueView)]-30-|";    NSArray *hCons = [NSLayoutConstraint constraintsWithVisualFormat:hVFL options:NSLayoutFormatAlignAllBottom | NSLayoutFormatAlignAllTop metrics:nil views:@{
@"blueView":blueView, @"redView":redView}]; [self.view addConstraints:hCons]; //2.2垂直方向的约束 NSString *vVFL = @"V:[blueView(50)]-30-|"; NSArray *vCons = [NSLayoutConstraint constraintsWithVisualFormat:vVFL options:0 metrics:nil views:@{
@"blueView":blueView}]; [self.view addConstraints:vCons];
举例:

// 代码方式实现自动布局 VFL

    // 创建一个Tableview;

    UITableView *tableView = [[UITableViewalloc] init];

    tableView.backgroundColor = [UIColorredColor];

#warning 代码实现自动布局,要设置下面的属性为NO

    tableView.translatesAutoresizingMaskIntoConstraints =NO;

    [self.viewaddSubview:tableView];

    

    // 创建输入框View

    WCInputView *inputView = [WCInputViewinputView];

    inputView.translatesAutoresizingMaskIntoConstraints =NO;

    [self.viewaddSubview:inputView];

    

    // 自动布局

    

    // 水平方向的约束

   NSDictionary *views = @{

@"tableview":tableView,

                            @"inputView":inputView};

    

    // 1.tabview水平方向的约束

    NSArray *tabviewHConstraints = [NSLayoutConstraintconstraintsWithVisualFormat:@"H:|-0-[tableview]-0-|"options:0metrics:nilviews:views];

    [self.viewaddConstraints:tabviewHConstraints];

    

    // 2.inputView水平方向的约束

    NSArray *inputViewHConstraints = [NSLayoutConstraintconstraintsWithVisualFormat:@"H:|-0-[inputView]-0-|"options:0 metrics:nil views:views];

    [self.viewaddConstraints:inputViewHConstraints];

    

    

    // 垂直方向的约束

    NSArray *vContraints = [NSLayoutConstraintconstraintsWithVisualFormat:@"V:|-64-[tableview]-0-[inputView(50)]-0-|"options:0metrics:nilviews:views];

    [self.viewaddConstraints:vContraints];

    self.inputViewConstraint = [vContraintslastObject];//获取最后一个约束

    NSLog(@"%@",vContraints);

转载地址:http://qhlgi.baihongyu.com/

你可能感兴趣的文章
网络_多线程下载
查看>>
网络_httpClient
查看>>
网络_HttpURLConnection_原始类
查看>>
网络_OKHttp
查看>>
android_事件分发机制_几行代码直接通晓
查看>>
图片_OOM_OutOfMemory
查看>>
技术学习_经验分享
查看>>
android中常见的设计模式有哪些?
查看>>
ViewDragHelper_v4的滑动视图帮助类_解释和代码
查看>>
即时通讯技术- 推送技术协议方案
查看>>
vitamio简介.java
查看>>
ActiveMQ 实现负载均衡+高可用部署方案
查看>>
《搜索和推荐中的深度匹配》——2.5 延伸阅读
查看>>
解读:阿里文娱搜索算法实践与思考
查看>>
基于位置的点击模型
查看>>
链表操作算法题合集
查看>>
Crackme3 破解教程
查看>>
奖学金评比系统(数据库系统设计版)
查看>>
HTTP Live Streaming直播
查看>>
rtmp+fms rtmp 视频发布环境
查看>>