当UIScrollView遇上SnapKit
来源:互联网 发布:exe打包软件 编辑:程序博客网 时间:2024/06/05 03:59
UIScrollView是大家常用的一个控件,今天看看UIScrollView与SnapKit的简单使用
首先要理解一点核心思想:UIScrollView是依靠与其子视图(subview)之间的约束来确定ContentSize的大小。为什么这么说呢?
这是因为UIScrollView是个非常特殊的UIView, 对于UIScrollView的subview来说,它的leading/trailing/top/bottom的space是相对于UIScrollView的contentSize而不是bounds来确定的,换句话说:UIScrollView与其subview之间相对位置的约束并不会直接用于frame的计算,而是会转化为对ContentSize的计算。当UIScrollView知道了上下左右的约束分别指向subview的什么位置之后,只要subview的位置固定下来了,那么UIScrollView的ContentSize的大小就确定下来了。
但是当我们尝试使用UIScrollView和它subview的leading/trailing/top/bottom来互相决定大小的时候,会出现Has ambiguous scrollable content width/height」的 warning。所以我们习惯的做法是在UIScrollView和它原来的subviews之间增加一个contentView,依靠contentView来确定contentSize。
注意几点:
1)如果我们需要竖向的滑动效果,就把width设为和scrollview相同,如果需要横向的滑动 就把height设为和scrollview相同
2)使用了SnapKit或者说AutoLayout,那么就不需要设置UIScrollView的ContentSize了,系统会根据constraints自己来确定ContentSize的大小
import UIKitimport SnapKitclass ViewController: UIViewController { let scrollView = UIScrollView() let contentView = UIView() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.white view.addSubview(scrollView) scrollView.snp.makeConstraints { (make) in make.edges.equalTo(view) } // 添加容器视图 scrollView.addSubview(contentView) contentView.snp.makeConstraints { (make) in make.top.bottom.equalTo(scrollView) make.left.right.equalTo(view) // 确定的宽度,因为垂直滚动 } let label1 = UILabel() contentView.addSubview(label1) label1.numberOfLines = 0 label1.backgroundColor = UIColor.yellow label1.snp.makeConstraints { (make) in make.left.right.equalTo(contentView).inset(20) make.top.equalTo(contentView).offset(20) } let label2 = UILabel() contentView.addSubview(label2) label2.numberOfLines = 0 label2.backgroundColor = UIColor.red label2.snp.makeConstraints { (make) in make.left.right.equalTo(label1) make.top.equalTo(label1.snp.bottom).offset(20) make.bottom.equalToSuperview() // 底部一定要,不然不能够确定contentSize。 } label1.text = "年注册即可afhjvajvbjjzxbzjcbjznckjnckjnalfnvzjnv今年福建男子在看 v 你在今年初v 和 iv 分 奥斯 v 和 i 导致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可年注册即可afhjvajvbjjzxbzjcbjznckjnckjnalfnvzjnv今年福建男子在看 v 你在今年初v 和 iv 分 奥斯 v 和 i 导致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可年注册即可afhjvajvbjjzxbzjcbjznckjnckjnalfnvzjnv今年福建男子在看 v 你在今年初v 和 iv 分 奥斯 v 和 i 导致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可年注册即可afhjvajvbjjzxbzjcbjznckjnckjnalfnvzjnv今年福建男子在看 v 你在今年初v 和 iv 分 奥斯 v 和 i 导致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可" label2.text = "致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可afhjvajvbjjzxbzjcbjznckjnckjnalfnvzjnv今年福建男子在看 v 你在今年初v 和 iv 分 奥斯 v 和 i 导致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可afhjvajvbjjzxbzjcbjznckjnckjnalfnvzjnv今年福建男子在看 v 你在今年初v 和 iv 分 奥斯 v 和 i 导致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可年注册即可afhjvajvbjjzxbzjcbjznckjnckjnalfnvzjnv今年福建男子在看 v 你在今年初v 和 iv 分 奥斯 v 和 i 导致 v 㷣 v 后ID v 家 啊㷣 vi 后ID v 家 简单南昌召开农村做课间操你自己看自己看 v 你做课间操政策加快农村政策框架女装穿几年注册即可" }}
效果图如下:
- 当UIScrollView遇上SnapKit
- UIScrollView遇上AutoLayout
- 当管理者遇上技术
- 当Hibernate遇上Spring
- 当 Hibernate 遇上 Spring
- 当Hibernate遇上Spring
- 当美女遇上变形金刚
- 当黑客遇上菜鸟
- 当GPL遇上MP
- 当 Hibernate 遇上 Spring
- 当爱情遇上房子
- 当挖掘遇上分布式
- 当Maven遇上MyEclipse
- 当vim遇上C++
- 当vim遇上C++
- 当Widget遇上MID
- 当Maven遇上MyEclipse
- 当vim遇上C++
- “整数序列” 中 Presentation Error
- MFC公共控件
- A+B for Input-Output Practice (II)
- CSDN-markdown编辑器的使用
- _init_()函数作用
- 当UIScrollView遇上SnapKit
- 第三章作业
- linux下编译安装最新版phalcon centos下PHP7添加phalcon扩展
- Lazarus和Delphi中一些函数的对应关系
- spring getBean源码调用大致流程
- Java开发代码规范之异常日志(二)——日志规约
- bootstrap 轮播效果
- Unity ScrollView图片滑动翻页效果
- 用Java实现冒泡排序法