NSLayoutConstraint 使用详解 VFL使用介绍

 

注意  

使用前必须先取消所有的你想设置View 的 Autoresizing 属性 因为 Autoresizing  Layout不能共存  系统默认是 Autoresizing

 for v in subviews {
            v.translatesAutoresizingMaskIntoConstraints=false
        }
  • 自动布局核心公式
view1.attr1 = view2.attr2 * multiplier + constant
  • 自动布局构造函数
NSLayoutConstraint(item: 视图, 
    attribute: 约束属性, 
    relatedBy: 约束关系, 
    toItem: 参照视图, 
    attribute: 参照属性, 
    multiplier: 乘积, 
    constant: 约束数值)
  • 如果指定  约束

    • 参照视图设置为 nil
    • 参照属性选择 .NotAnAttribute
  • 自动布局类函数

NSLayoutConstraint.constraintsWithVisualFormat(VLF公式, 
    options: [], 
    metrics: 约束数值字典 [String: 数值], 
    views: 视图字典 [String: 子视图])
  • VFL 可视化格式语言

    • H 水平方向
    • V 垂直方向
    • | 边界
    • [] 包含控件的名称字符串,对应关系在 views 字典中定义
    • () 定义控件的宽/高,可以在 metrics 中指定
复制代码
  // icon布局  上下左右居中
        addConstraint(NSLayoutConstraint(item: iconView, attribute: .centerX,
            relatedBy: .equal,
            toItem: self,
            attribute: .centerX,
            multiplier: 1.0,
            constant: 0))
        addConstraint(NSLayoutConstraint(item: iconView,    attribute: .centerY,
             relatedBy: .equal,
             toItem: self,
             attribute: .centerY,
             multiplier: 1.0,
             constant: -50))

 
   maskiconView 和屏幕等宽  和屏幕顶部对齐 距离  loginBtn顶部 -35 距离
  let viewDic : [String : Any] = ["maskiconView":maskiconView,"loginBtn":loginBtn]
        let metricDic = ["spacing":-35]
        
        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[maskiconView]-0-|",
              options: [],
              metrics: nil,
              views: viewDic))
        
        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[maskiconView]-(spacing)-[loginBtn]",
              options: [],
              metrics: metricDic,
              views: viewDic))
复制代码

 

posted @   ZhangShengjie  阅读(677)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示