• 主页
  • 随笔
  • 技术笔记
  • 全部文章
标签 友链 关于我

  • 主页
  • 随笔
  • 技术笔记
  • 全部文章

Autolayout-VFL语言添加约束

阅读数:次 2015-09-19
字数统计: 633字   |   阅读时长≈ 2分

什么是VFL语言:

  • VFL全称是Visual Format Language,翻译过来是“可视化格式语言”
  • VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言
  • VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码。为我们简化了许多代码量。

二、使用步骤

  • 创建控件
  • 添加到父控件
  • 禁用Aoturesizing
  • 添加约束

三、使用方法

  • 这里先展示一个实例:

      NSArray *blueHArr = [NSLayoutConstraint constraintsWithVisualFormat:
      @"H:|-20-[blueView]-20-|" 
      options:kNilOptions
      metrics:nil views:
      NSDictionaryOfVariableBindings(blueView)];
    
  • 方法介绍:

    • constraintsWithVisualFormat:这个方法返回了一个数组;
    • @”H:|-20-[blueView(100)]-20-|”:这句话表明所添加的约束,H的意思是水平方向添加约束,blueView 视图名称,(100)代表着blueView 的宽为100,blueView距离父类的左边20,距离父类的右边是20;
    • options:是对其方式;
    • metrics:返回的是一个字典,它的意思是可以将约束中的值用某些字符串来代理,然后在这个字典中给多对应的字符串赋值,方便修改,并且增加可读性;
    • views:返回的也是一个字典,这个字典的意思是:你可以将前面的view用其他字符串来代替,在这里在给他赋给对应的view的名字。
  • 我可以将上面的约束语句改成如下这样:

      NSArray *blueHArr = [NSLayoutConstraint 
      constraintsWithVisualFormat:@"H:|-aa-[cccc(100)]-20-|"
      options:kNilOptions
      metrics:@{@"aa":@20}
      views:@{@"cccc":blueView}];
    
    • 这里我用aa替换了20,cccc替换了blueVuew
    • 这里有一个简单的方法,就是使用NSDictionaryOfVariableBindings(blueView)来替换views中的内容也是可以的。

四、VFL的缺点

  • VFL语句不支持乘除法

  • 比如我想表示redview是blueview高度的一半,

  • 我们是不能这样写的:

      NSArray *redVArr = [NSLayoutConstraint 
      constraintsWithVisualFormat:@"V:[blueView]-20-[redView(==blueView*0.5)]" 
      options:NSLayoutFormatAlignAllRight 
      metrics:nil 
      views:NSDictionaryOfVariableBindings(blueView, redView)];
    
  • 原因就是这里包含了乘法,而一旦VFL语句中包含了乘除法那么系统就会不识别而崩溃。

  • 所以,当一涉及到乘除法的时候,我们又不得不再次使用系统原来的方法中来:

      NSLayoutConstraint *redWidth = [NSLayoutConstraint 
      constraintWithItem:redView 
      attribute:NSLayoutAttributeWidth 
      relatedBy:NSLayoutRelationEqual
      toItem:blueView 
      attribute:NSLayoutAttributeWidth
      multiplier:0.5
      constant:0.0];
    

五、总结

  • 苹果虽然推出了这项简单的语言,简化了代码量,也方便了我们用代码来书写约束。

  • 但是VFL的缺陷也是很明显的,不支持乘除法的的弊端让它的应用也是大打折扣。

  • 本文作者: Grx
  • 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2015/09/19/Autolayout-VFL语言添加约束/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • OC

扫一扫,分享到微信

ios runtime浅析:Method Swizzling
如何使用appledoc
  1. 1. 什么是VFL语言:
    1. 1.1. 二、使用步骤
    2. 1.2. 三、使用方法
    3. 1.3. 四、VFL的缺点
    4. 1.4. 五、总结
© 2014-2024 Grx
GitHub:hexo-theme-yilia-plus by Litten
本站总访问量次 | 本站访客数人
  • 标签
  • 友链
  • 关于我

tag:

  • life
  • OC
  • Google
  • Fastlane
  • Flutter
  • hexo
  • 智能家居
  • Apple Watch
  • 逆向
  • Lottie
  • PHP
  • cocos2d
  • Mac
  • MonkeyKing
  • RN
  • Swift
  • RAC
  • WKWebView
  • WebView
  • Xcode
  • xcode
  • ios
  • Android
  • appledoc
  • MMKV
  • LLVM
  • FreamWork






    
    

  • 唐巧的博客
  • 王巍(喵神)OneVsDen
  • 阿里“念纪“
  • 滴滴-戴铭
  • 郭曜源(ibireme)
  • 阿里”南栀倾寒“
  • 蘑菇街李忠
  • 码农人生
  • 玉令天下
  • bang
  • Ian的博客
这里是Grx的个人博客:
iOS开发工程师一枚
联系方式:
QQ:1217255509
Email:grx0917@sina.com
知识管理,时间管理,自我管理,架构即未来
欢迎技术交流!