[快速学会Swift第三方库] Cartography篇

[快速学会Swift第三方库] Cartography篇

Cartography 是用来声明 Swift 中的 Auto Layout,无需输入任何 stringly 就可设置自己 Auto Layout 的约束声明。

目录

  • 快速学会Swift第三方库 Cartography篇
    • 目录
    • 编码之前
      • 导入 Cartography
      • 其他操作
    • 基本约束
      • 示例代码
      • 运行结果
    • 替换约束
      • 示例代码
      • 运行结果
    • 复合约束与对齐
      • 示例代码
      • 运行结果
    • 边距
      • 示例代码
      • 运行结果
    • 深入学习

编码之前

导入 Cartography

推荐使用CocoaPods进行导入,CocoaPods是一个负责管理iOS项目中第三方开源库的工具,安装CocoaPods之后使用命令行就能轻松地对所有第三方开源库进行安装和更新,而不需要每次上GitHub去下载。
CocoaPods的安装过程传送门:iOS 9 导入类库全面详尽过程(Ruby安装->CocoaPods安装->导入类库)
手动下载:GitHub-Cartography主页

装好CocoaPods后,修改Podfile文件内容为如下:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

target 'Web' do
pod 'Cartography', '~> 0.6.0'
end
xcodeproj 'Desktop/Web/Web.xcodeproj'

target后面为工程名,最后一行为工程路径(这里的Web是我的工程名)

再执行命令:

$ pod install

其他操作

另外还需要在Target->工程名->Build Settings->Search Paths->User Header Search Paths处添加Cartography所在的目录:

最后在你需要用到Cartography的类中加上:

import Cartography

基本约束

示例代码

    func baseConstrain() {
        let view1 = UIView()
        let view2 = UIView()
        view1.backgroundColor = UIColor.blueColor()
        view2.backgroundColor = UIColor.redColor()
        self.view.addSubview(view1)
        self.view.addSubview(view2)

        constrain(view1, view2) { (view1, view2) in
            //view宽度等于父视图宽度-50的一半
            view1.width == (view1.superview!.width - 50) * 0.5
            //view2的宽度等于view1宽度-50
            view2.width   == view1.width - 50
            //view的高度等于40
            view1.height == 40
            //view2的高度等于view1的高度
            view2.height == view1.height
            //view1水平居中
            view1.centerX == view1.superview!.centerX
            //view2和view1中心水平对齐
            view2.centerX == view1.centerX
            //view1的顶部离父视图的顶部距离大于20
            view1.top >= view1.superview!.top + 20
            //view2的顶部离view1的底部距离等于20
            view2.top == view1.bottom + 20
        }
    }

运行结果

替换约束

示例代码

    func replaceConstrain()  {
        let view = UIView()
        view.backgroundColor = UIColor.blueColor()
        self.view.addSubview(view)

        constrain(view) { (view) in
            view.width == 100
            view.height == 100
        }

        let group = ConstraintGroup()

        //设定view位置于左上角
        constrain(view, replace: group) { (view) in
            view.top == view.superview!.top
            view.left == view.superview!.left
        }

        //设定view位置于右下角
        constrain(view, replace: group) { (view) in
            view.bottom == view.superview!.bottom
            view.right == view.superview!.right
        }

        //执行动画
        UIView.animateWithDuration(0.5, animations: view.layoutIfNeeded)
    }

运行结果

可以看到view从左上角移动到右下角,最终如下所示:

复合约束与对齐

示例代码

    func aligning()  {
        let view1 = UIView()
        let view2 = UIView()
        let view3 = UIView()
        view1.backgroundColor = UIColor.blueColor()
        view2.backgroundColor = UIColor.redColor()
        view3.backgroundColor = UIColor.greenColor()
        self.view.addSubview(view1)
        self.view.addSubview(view2)
        self.view.addSubview(view3)

        constrain(view1, view2, view3) { (view1, view2, view3) in
            //复合约束,view1大小为父视图的1/4,位置居中
            view1.size == view1.superview!.size / 4
            view1.center == view1.superview!.center

            view2.size == view1.size / 2
            view3.size == view1.size / 3

            //3个view的顶部对齐
            align(top: view1, view2, view3)
            //3个view水平均匀分布,相邻view之间距离为10
            distribute(by: 10, horizontally: view1, view2, view3)
        }
    }

运行结果

边距

示例代码

   func edge()  {
        let view = UIView()
        view.backgroundColor = UIColor.blueColor()
        self.view.addSubview(view)

        constrain(view) { (view) in
            //view与父视图的上下左右边距均为20
            view.edges == inset(view.superview!.edges, 20, 20, 20, 20)
        }
    }

运行结果

深入学习

这里列出了最主要的几种约束,如果你希望能够更加深入地学习Cartography,可以前往GitHub-Cartography主页

时间: 2024-08-02 22:08:39

[快速学会Swift第三方库] Cartography篇的相关文章

[快速学会Swift第三方库] Eureka篇

[快速学会Swift第三方库] Eureka篇 Eureka可以帮你简单优雅的实现动态table-view表单.它由rows,sections和forms组成.如果你的app包含大量表单,Eureka可以真正帮你节省时间. 目录 快速学会Swift第三方库 Eureka篇 目录 编码之前 导入 Eureka 其他操作 创建表单 基础表单 选择类型表单 Segment风格选择器 标准选择器 pickerView风格选择器 三种风格选择器效果对比 带输入框的表单 自定义Row 深入学习 编码之前 导

[快速学会Swift第三方库] HanekeSwift篇

[快速学会Swift第三方库] HanekeSwift篇 Haneke是一个轻量级的缓存,为UIImage,JSON,NSData,String提供记忆和LRU磁盘缓存. 目录 快速学会Swift第三方库 HanekeSwift篇 目录 编码之前 导入HanekeSwift 其他操作 使用缓存 NSData 示例代码 运行结果 JSON 测试接口 示例代码 运行结果 UIImage和String UIImage的拓展用法 示例代码 运行结果 fetcher的其他用法 深入学习 编码之前 编码之前

[快速学会Swift第三方库] SwiftyJSON篇

[快速学会Swift第三方库] SwiftyJSON篇 SwiftyJSON使得用Swift处理JSON数据更加容易.这是解析JSON字符串封装类.实现功能与Javascript中的JSON.parse相近,使用方便. 目录 快速学会Swift第三方库 SwiftyJSON篇 目录 编码之前 导入SwiftyJSON 其他操作 解析本地JSON 示例JSON 示例代码 运行结果 解析网络JSON 示例JSON 示例代码 运行结果 深入学习 编码之前 导入SwiftyJSON 推荐使用CocoaP

[快速学会Swift第三方库] Alamofire篇

[快速学会Swift第三方库] Alamofire篇 Alamofire是 Swift 语言的 HTTP 网络开发工具包,AFNetworking的 Swift 版,使用起来相当简单. 目录 快速学会Swift第三方库 Alamofire篇 目录 编码之前 导入Alamofire 其他操作 Web请求 示例代码 运行结果 数据请求JSON 示例代码 运行结果 上传文件 示例代码 运行结果 下载文件 示例代码 运行结果 深入学习 编码之前 导入Alamofire 推荐使用CocoaPods进行导入

[快速学会Swift第三方库] Kingfisher篇

[快速学会Swift第三方库] Kingfisher篇 Kingfisher是一个轻量的下载和缓存网络图片库.下载和缓存是异步进行操作,已经下载好的图片会缓存在内存和本地,极大得提高app的体验. 目录 快速学会Swift第三方库 Kingfisher篇 目录 编码之前 导入 Kingfisher 其他操作 基础操作 使用optionsInfo参数 回调函数 取消任务 下载器 缓存系统 预取 动态图片 深入学习 编码之前 导入 Kingfisher 推荐使用CocoaPods进行导入,Cocoa

[快速学会Swift第三方库] SQLite.swift篇

[快速学会Swift第三方库] SQLite.swift篇 SQLite.swift 是一个使用纯 Swift 语言封装 SQLite3 的操作框架. 特性: 简单的查询和参数绑定接口 安全.自动类型数据访问 隐式提交和回滚接口 开发者友好的错误处理和调试 文档完善 通过广泛测试 目录 快速学会Swift第三方库 SQLiteswift篇 目录 编码之前 导入SQLiteswift 其他操作 链接数据库 创建表 插入数据 查询数据 修改数据 删除数据 深入学习 编码之前 导入SQLite.swi

[快速学会Swift第三方库]AlamofireObjectMapper

[快速学会Swift第三方库]AlamofireObjectMapper篇 通常网络请求返回的是JSON数据,使用ObjectMapper可以让JSON数据直接转化为对象,而使用Alamofire进行网络请求时,使用AlamofireObjectMapper可以直接返回对象,更加简洁. Alamofire的使用:[快速学会Swift第三方库] Alamofire篇 ObjectMapper在非Alamofire请求下的使用:GitHub-ObjectMapper主页 目录 快速学会Swift第三

React Native常用第三方库

前言 React Native出来一年多了,受到各大开发人员的喜爱,但是由于只是专注于View层的开发,因此在很多深层次上还需要结合原生app做一定的兼容,还有就是现在好多控件,如Android中已是系统的控件的sidemenu.checkbox.gridview等,这些在react native中 系统是没有给我们提供的,这时候就借助了第三方开源的力量. 那么我们今天说说在React Native项目开发中常见的一些第三方库. 常见的第三方库 组件篇 CheckBox(多选按钮) react-

Swift - CocoaPods的安装使用详解(自动安装管理第三方库)

我们开发的时候,常常需要引入一些第三方库(比如:Alamofire.SwiftyJSON 等等).过去的做法是把这些库下载下来,并引入到工程中.如果有依赖其他库的话,还要手动将这些依赖库给添加进来.关键是如果这些第三方库后面有更新的话,我们还要先把项目中原来的库给删除.再重复前面的步骤.这样就很麻烦了. 而使用 CocoaPods 以后,这些工作我们都不需要做.只需做好配置工作,安装更新这些第三方库,CocoaPods 都会自动帮我们做好. 一.CocoaPods介绍 (1)CocoaPods