【原】Masonry+UIScrollView的使用注意事项
【原】Masonry+UIScrollView的使用注意事项
本文转载请注明出处 —— polobymulberry-博客园
1.问题描述
我想实现的使用在一个UIScrollView依次添加三个UITableView(tableView1、tableView2、tableView3)。最后想达到的效果就像下图这样:

或者用这张图更形象点:

然后我的代码大概的样子
// 自定义了一个UIScrollView为ICScrollView
// 在ViewController中添加到self.view中
// ViewController.m
- (void)viewDidLoad {
// ...
[self.view addSubview:self.scrollView];
// ...
} - (ICScrollView *)scrollView
{
// ...
if (_scrollView == nil) {
_scrollView = [[ICScrollView alloc] init];
_scrollView.contentSize = CGSizeMake(width, height);
}
// ...
} // 然后我在ICScrollView中重载了init函数
// ICScrollView.m
- (instancetype)init
{
self = [super init];
if (self) {
[self addSubview:self.tableView1];
[self addSubview:self.tableView2];
[self addSubview:self.tableView3]; [self layoutScrollSubViews];
}
return self;
} - (void)layoutScrollSubViews
{
[self.tableView1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(self.size);
make.leading.mas_equalTo(self.mas_leading);
make.top.mas_equalTo(self.mas_top);
}]; [self.tableView2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(self.size);
make.leading.mas_equalTo(self.tableView1.mas_trailing);
make.top.mas_equalTo(self.mas_top);
}]; [self.tableView3 mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(self.size);
make.leading.mas_equalTo(self.tableView2.mas_trailing);
make.top.mas_equalTo(self.mas_top);
}];
}
上述代码用Masonry给要添加到scrollView上的3个tableView添加了约束。但是当我显示的时候,发现三个tableView确实是初始化了,也添加到scrollView上了,但是宽度和高度均为0。问题就是我约束都设置好了,为什么还会出现问题?
2.问题分析
出现使用autolayout后,view的宽高均为0。很可能是因为约束设置出错。搜索了无数文章,尝试了无数可能后,我觉得问题很可能处在scrollView上。所以我搜索autolayout+UIScrollView,还真发现了UIScrollView在Autolayout使用下的一些问题。最主要的问题就是:
当我使用make.leading.mas_equalTo(self.mas_leading) 的时候,其实这里的self.mas_leading指的是scrollView的contentSize的那个leading。
有没有发现,此时我的contentSize还没有指定,因为他是我在_scrollView = [[ICScrollView alloc] init]; 后面添加的,而此时约束已经完成了。所以最简单的办法是把_scrollView.contentSize = CGSizeMake(width, height); 放到layoutScrollSubViews之前,就可以啦!具体按照你的代码习惯添加吧。
3.参考文章
【原】Masonry+UIScrollView的使用注意事项的更多相关文章
- Masonry UIScrollView autolayout 的一个奇特的问题
事情是这样的.... 我一个工程里 一直使用的 masonry 做autolayout,有个gesturerReconizer的bug,找了很久,发现很奇怪一个现象: 我的某个view 是这样的 |- ...
- Mac系统如何编辑hosts文件
Mac系统如何编辑hosts文件 Hosts 是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系 统会首先 ...
- day 3 大纲笔记
01 昨日内容回顾 while 条件: 循环体 如何终止循环: 1,改变条件. 2,break. 3,exit() quit() 不推荐. 关键字: break continue while else ...
- iOS autoLayout总结
本文转自 http://ruikq.github.io/ios/autolayout/uiscrollview/2015/01/27/iOS-autolayout%E6%80%BB%E7%BB%93. ...
- 四、Linux学习之文件处理命令
1.建立目录:mkdir 格式:mkdir –p [目录名] -p 递归创建目录 注意事项: 如果是创建单个目录直接mkdir [目录名就可以] 如果是创建一个目录下的目录也就是递归创建目录请 ...
- 小旭讲解 LeetCode 53. Maximum Subarray 动态规划 分治策略
原题 Given an integer array nums, find the contiguous subarray (containing at least one number) which ...
- java-day02
数据类型自动转换 要求:数据范围从小到大 数据类型强制类型转换 格式:范围小的数据类型 范围小的变量名 = (范围小的数据类型)原范围大的数据 注意事项: 1.可以会造成数据溢出或者是精度损失. 2. ...
- Masonry使用注意事项
1 理解自身内容尺寸约束与抗压抗拉 自身内容尺寸约束:一般来说,要确定一个视图的精确位置,至少需要4个布局约束(以确定水平位置x.垂直位置y.宽度w和高度h).但是,某些用来展现内容的用户控件,例如文 ...
- 使用Masonry对UIScrollView自动布局
之前使用Masonry对UIScrollView进行过约束,当时是遇到了问题的,怎么约束都不对,因为赶进度直接改用frame了也没有对问题深究.就这样过了很久.........,直到前一段换工作的时候 ...
随机推荐
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- CYQ.Data、ASP.NET Aries 百家企业使用名单
如果您或您所在的公司正在使用此框架,请联系左侧的扣扣,告知我信息,我将为您添加链接: 以下内容为已反馈的用户,(收集始于:2016-08-08),仅展示99家: 序号 企业名称 企业网址 备注 1 山 ...
- 23种设计模式--观察者模式-Observer Pattern
一.观察者模式的介绍 观察者模式从字面的意思上理解,肯定有两个对象一个是观察者,另外一个是被观察者,观察者模式就是当被观察者发生改变得时候发送通知给观察者,当然这个观察者可以是多个对象,在项 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- springmvc+mybatis+spring 整合 bootstrap html5
A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技 ...
- 负载均衡——nginx理论
nginx是什么? nginx是一个强大的web服务器软件,用于处理高并发的http请求和作为反向代理服务器做负载均衡.具有高性能.轻量级.内存消耗少,强大的负载均衡能力等优势. nginx架构? ...
- iOS 数据存储之SQLite3的使用
SQLite3是iOS内嵌的数据库,SQLite3在存储和检索大量数据方面非常有效,它使得不必将每个对象都加到内存中.还能够对数据进行负责的聚合,与使用对象执行这些操作相比,获得结果的速度更快. SQ ...
- 浅析SQL查询语句未显式指定排序方式,无法保证同样的查询每次排序结果都一致的原因
本文出处:http://www.cnblogs.com/wy123/p/6189100.html 标题有点拗口,来源于一个开发人员遇到的实际问题 先抛出问题:一个查询没有明确指定排序方式,那么,第二次 ...
- 跟着老男孩教育学Python开发【第三篇】:Python函数
set 无序,不重复,可嵌套. 函数 创建函数: 1.def关键字,创建函数 2.函数名 3.() 4.函数体 5.返回值 发邮件函数 def sendmail(): import smtpl ...