博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stevia别具一格的约束库
阅读量:6257 次
发布时间:2019-06-22

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

源码结构

1 约束条件的封装 2 样式的封装 3 控件常用方法的封装

整体思路

1 每个方法都都将加入的新的view添加到当前的数组中然后返回,最后结果就是方法会返回涉及到的全部views 2 对操作符进行了大量的自定义简化了操作

约束条件封装

Stevia+Alignment.swift

Horizontally 横向居中对齐 Vertically 竖向居中对齐 Center 中心对齐 有offset方法表示进行偏移 基类方法为以下三个方法:

func align(_ axis: UILayoutConstraintAxis, views: [UIView])func align(_ axis: UILayoutConstraintAxis, v1: UIView, with v2: UIView, offset: CGFloat)func align(_ attribute: NSLayoutAttribute, views: [UIView]) -> [UIView]复制代码

约束属性枚举: UILayoutConstraintAxis: 描述两个的横竖向关系 .horizontal, .vertical NSLayoutAttribute: 描述对象的约束值 所有方法都调用constraint方法添加约束

Stevia+Equation.swift

主要涉及操作符重置,通过操作符重置来设置约束 button.CenterY == avatar.Bottom - 4 label.Width <= button.Width * 3 label.Height == (button.Width / 7) + 3 button.Left >= image.Right - 20 image.Height >= 100 view.Top == 10 以上的所有操作符都已经重载,看的出非常方便,也比较直观 返回值都是NSLayoutConstraint,可以设置权重

(label.Width == button.Width * 3).priority = 1000 // Making this a required constraint.复制代码

Stevia+Operators.swift

主要定义控件从左到右添加约束的方法 1 具体父类边缘的具体 2 View之间距离 SideConstraint结构体,表示和父类的边缘的距离 PartialConstraint结构体,表示局部的约束

Stevia+FlexibleMargin.swift

主要处理间距是>=, <=的情况 SteviaFlexibleMargin结构体: 封装数组和NSLayoutRelation(lessThanOrEqual, greaterThanOrEqual) PartialFlexibleConstraint结构体: 封装 SteviaFlexibleMargin 和 view

Stevia+Style.swift

样式设置语法糖

button.style { b in        b.A = X        b.B = Y        b.C = Z    }      button.style(buttonStyle)  // later  func buttonStyle(b: UIButton) {    ..styling code  }复制代码

Stevia+Hierarchy.swift

添加到subview下

Stevia+Stacks.swift

核心类 完成控件自上到下布局

layout(    100,    |-email-| ~ 80,    8,    |-password-forgot-| ~ 80,    >=20,    |login| ~ 80,    0)复制代码

主要方法stackV(_ objects: [Any]) -> [UIView] 如果是CGFloat就保存到previousMargin中下次使用,是>=20就保存到previousFlexibleMargin下次使用,每行最后会返回一个View或者[UIView],取出第一个添加top和bottom约束,如果是String(""),表示不进行任何操作 提供了一个自上而下的线性布局

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

你可能感兴趣的文章
《梦断代码》读后感02
查看>>
java面试资料总结
查看>>
ubuntu 16.04 安装PhpMyAdmin
查看>>
c#中的常用ToString()方法总结
查看>>
ajax五,jsonp跨域的本质
查看>>
调用打印机打印
查看>>
poj1742
查看>>
js--val()比较少用的用法
查看>>
bzoj2002: [Hnoi2010]Bounce 弹飞绵羊
查看>>
mysql的分区和分表
查看>>
Java 读取 .properties 配置文件
查看>>
IntelliJ IDEA 12 key from twitter
查看>>
css
查看>>
装饰设计模式
查看>>
《Linux内核原理与分析》第八周作业
查看>>
企业级工作流解决方案(二)--微服务总体介绍
查看>>
Bonbo Git Server
查看>>
取消文件默认打开方式
查看>>
JVM 调试工具
查看>>
Linux C 语言 获取系统时间信息
查看>>