美文网首页
stevia别具一格的约束库

stevia别具一格的约束库

作者: 狂奔的兔子 | 来源:发表于2017-11-13 21:25 被阅读23次

源码结构

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(""),表示不进行任何操作
提供了一个自上而下的线性布局

相关文章

  • stevia别具一格的约束库

    源码结构 1 约束条件的封装2 样式的封装3 控件常用方法的封装 整体思路 1 每个方法都都将加入的新的view添...

  • MySql 中的约束

    MySql 中的约束 作用:给表添加约束值,从而约束用户操作数据库的行为 数据库常见的约束值如下: 默认值约束(d...

  • Python 高级 14(3)数据库约束

    数据库常用约束、增加删除约束、数据库导入导出、数据表设计思想-三大范式 2.4.8 添加约束 约束是一种限制,它通...

  • Mysql约束

    一、约束基本概念 约束:指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的有...

  • part8. 高级SQL特性

    第22课 高级SQL特性 约束 1.约束:管理如何插入或管理数据库数据的规则DBMS通过在数据库表上施加约束来实施...

  • SQL学习二十、SQL高级特性

    约束(constraint) 管理如何插入或处理数据库数据的规则。 DBMS 通过在数据库表上施加约束来实施引用完...

  • stevia~my true love

    How time flys. It is the nineth year of my working with A...

  • Swift 常用库

    约束库 SnapKit[https://github.com/SnapKit/SnapKit] 网络库 Alamo...

  • MySQL数据约束

    什么是数据约束 数据按照特定的规则、限制存入数据库.这种对数据的限制和规则就是数据约束. 约束类型 默认值约束 作...

  • MySql : 二、数据库表的约束、表和表之间的关系以及范式

    前言 本篇主要介绍了数据库中表字段的约束,表和表之前的关系,以及数据库设计的三大范式。 目录 一、数据库表的约束二...

网友评论

      本文标题:stevia别具一格的约束库

      本文链接:https://www.haomeiwen.com/subject/afstvxtx.html