SnapKit简介 SnapKit是一个优秀的第三方自适应布局库,它可以让iOS、OS X应用更简单地实现自动布局(Auto Layout) 下载链接 SnapKit SnapKit配置 使用pods方式引入类库 ,pod 'SnapKit' 引入头文件 import SnapKit SnapKit使用 示例: testView.snp.makeConstraints { (make) in make.left.equalToSuperview { get } public var rightMargin: SnapKit.ConstraintMakerExtendable { get } public var topMargin: SnapKit.ConstraintMakerExtendable SnapKit.ConstraintMakerExtendable { get } public var trailingMargin: SnapKit.ConstraintMakerExtendable 注意 使用SnapKit添加约束之前,需要在addSubview之后才能使用,否则会导致崩溃 在添加约束时常会出现一些错误,约束出现问题的原因一般就是两种:约束冲突和缺少约束。
前言
这是对 Swift 布局框架 SnapKit 的源码的一点分析,尝试搞清,一个好的布局框架,背后都做了些什么。 介绍 SnapKit 中的一些类
ConstraintView
等同于 UIView
ConstraintAttributes
用于构造约束关系的各种元素(上下左右等)
ConstraintDescription ----
至此,我们已经知道 SnapKit 是靠什么来确定了三个东西:
谁在做约束(ConstraintView)
怎么做约束(ConstraintMaker)
约束是什么(ConstraintDescription 上面我们知道了 aView 作为一个 UIView,它同时也就是一个 ConstraintView,ConstraintView 有一个 snp 的属性,这给我们提供了入口来通过 SnapKit 其他内容补充 2
SnapKit 里面用来表示位置主体的类其实不是 ConstraintView,而是 ConstraintItem
我们管这个“主体”叫 target,一个 target,再加上一个
前言 一直觉得 SnapKit 和 Masonry 这两个框架设计和封装的很好,用起来的体验也是一致的,翻了下它们的源码,对其设计方式和涉及的技术做了下记录。文章打算围绕,给谁做约束?如何设置约束? 这三个问题看看 SnapKit 和 Masnory 分别是怎么做的,正好也能够窥探下作者是如何利用 Swift 和 Objective-C 两个不同语言的不同特性做到一致的使用体验的。 如果还不了解这两个框架的使用的话可以参看它们项目 GitHub 说明:GitHub - SnapKit/SnapKit: A Swift Autolayout DSL for iOS & OS X,GitHub SnapKit ConstraintView 这个 View 实际上在 iOS 里就是 UIView,在 macOS 上就是 NSView。 SnapKit 下面通过 makeConstraints 我们来看看 ConstraintMaker 是如何在外部通过一个闭包来写约束关系的。
The Swift Pod being used is: SnapKit 更改podfile文件: 在podfile文件中指定项目的运行平台最低版本:platform:ios, ‘8.0’ 加入“use_frameworks 做了以上操作之后再pod install一下,就能成功安装snapkit了。 ? podfile文件 本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。
随后开始运行项目报错,程序卡死在启动页: ` dyld[44691]: Library not loaded: @rpath/SnapKit.framework/SnapKit Referenced /SnapKit' (no such file), '/usr/lib/swift/SnapKit.framework/SnapKit' (no such file, not in dyld cache ), '/private/preboot/Cryptexes/OS/usr/lib/swift/SnapKit.framework/SnapKit' (no such file), '/private/ /preboot/Cryptexes/OS/usr/lib/swift/SnapKit.framework/SnapKit' (no such file), '/usr/lib/swift/SnapKit.framework /SnapKit' (no such file), '/System/Library/Frameworks/SnapKit.framework/SnapKit' (no such file, not in
的时候,只要使用 snp 的地方都要 import SnapKit (当然这个主要是针对swift2.3 -> swift 3.0 并且没有使用 useasframework )。 这个时候会发现每个文件都 import SnapKit 这样来一下,是多么痛苦的事情。 \n//\n\nimport SnapKit") _ = try? 这个字符串,如果存在,则需要导入 import SnapKit 。 否则不需要 3、将 import SnapKit 放在 import UIKit 或 import Foundation 或 All rights reserved.
However if you're using Swift in your project, we recommend using SnapKit as it provides better type Masonry : https://github.com/SnapKit/Masonry SnapKit: https://github.com/SnapKit/SnapKit 2.1 Basic
masonry-X居中 SnapKit: ? snapKit-X居中
~~ 有两种解决方案 其本质都是控制编译时所使用的Swift版本 第一种:Xcode Pods -> Targets -> SnapKit -> Build Settings -> Swift language install 最后再来一下编译就搞定了 post_install do |installer| # 需要指定编译版本的第三方的名称 myTargets = ['ObjectMapper', 'SnapKit
# pod 的工程不显示任何警告 (2).针对指定的库隐藏警告 pod 'SnapKit', '~> 2.4', :inhibit_warnings => true 3.使用git的HEAD指向的分支 pod 'SwiftBase', :head 4.使用git指定使用 master 分支 pod 'Masonry', :git => 'https://github.com/SnapKit/Masonry.git /Reachability.git', :branch => 'frameworks' 6.使用git指定tag pod 'Masonry', :git => 'https://github.com/SnapKit
AutoLayout界面介绍 AutoLayout简单案例 AutoLayout进阶案例 UIStackView AutoLayout与UIScrollView UITableView行高自动计算 VFL介绍 SnapKit 介绍 SnapKit使用
:search_paths # Pods for testing end end 现在我们要安装一个第三方的类库 SnapKit,这是它的github主页https: //github.com/SnapKit/SnapKit,这个类库是用来做布局的。 target 'testTodo' do # 需要引入的类库写到这里 pod 'SnapKit', '~> 3.2.0' # Pods for testTodo
宏定义几个target都要用的的pod pod 'MJRefresh' #下拉刷新 pod 'Alamofire', '~> 4.0' #网络请求 pod 'SnapKit 我们现在要做的是: 主程序调用SDK获得一个vc 并 present 该vc中有一个按钮,点击事件的具体实现由主程序实现dismiss 在SDK中创建一个TestViewController 引入SnapKit BlocksKit 加入如下代码 import UIKit import BlocksKit import SnapKit public typealias ActionHandle = (_ vc
uiButton) 8 9uiButton.snp.makeConstraints { make in 10 make.center.equalTo(view) 11} COPY 方便起见,以上代码使用了 SnapKit ,在运行之前请先下载安装 SnapKit 在再底下加个方法 swift 1@objc func click() { 2 let vc = UIHostingController(rootView
RxSwift.framework", "$(SRCROOT)/Carthage/Build/iOS/SideMenu.framework", "$(SRCROOT)/Carthage/Build/iOS/SnapKit.framework )/$(FRAMEWORKS_FOLDER_PATH)/SideMenu.framework", "$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SnapKit.framework
基于 xcode 9.0 swift4.0 一、先引用SnapKit框架 SnapKit自己看git引入 利用其来约束组件 二、新建一个继承UIButton类的类文件,命名为DWFuncButton "init(coder:) has not been implemented") } } 三、创建一个继承UIView的类,命名为DWBoard,将其用作计算器的操作面板 首先引入SnapKit 框架 import SnapKit 先创建一个数组属性,存放操作面板上的所有功能按钮标题 var dataArray = ["0", "
文字大小,图片大小等比例放大 保持比值 :俩个UI元素或者图片的长宽等属性保持一定的比值 对齐 :元素间按某个方向对齐 屏幕适配的方法 Autoresizing AutoLayou VFL Masonry SnapKit
spec.requires_arc = true # 是否启用ARC spec.platform = :ios, "10.0" #依赖的文件 spec.dependency "SnapKit pod 'SnapKit', '~> 5.0.0' ... pod 'CosClubBasis','~> 0.0.1' # 私有库 end pod install # ok
MOImageButton 利用 Mansory / SnapKit 调整按钮的图片位置,分别显示在上下左右: How to use 一、OC: 1、add the MOImageButton.h and
SnapKit - 就是“snap”,--swift喜欢自动布局吗?当然喜欢!至少在storyboard中创建时会喜欢。 在代码中纯手工创建约束灰常痛苦,但幸运的是我们有了SnapKit,在板中用上它,你可以简单直观地编写约束了。