【原】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.参考文章

  1. AutoLayout深入浅出三[相遇Scrollview]
  2. UIScrollView 实践经验

最新文章

  1. 面向对象Part1对象的创建和Static!
  2. CentOS matplotlib 安装
  3. MUI(2)
  4. 一个简单的SNTP客户端
  5. Java编程思想学习(九) 异常处理
  6. BestCoder12 1002.Help him(hdu 5059) 解题报告
  7. Android安卓知识点
  8. Conversion between json and object using SBJson lib
  9. Phalcon处理404页面的 Ruter 方法
  10. 启动两个tomcat
  11. 判断一个key 是否在map中存在
  12. windows phone中,将crash report记录下来,写入文件,方便分析
  13. 颜色空间RGB与HSV(HSL)的转换
  14. CF 604C Alternative Thinking#贪心
  15. 数字类型——python3
  16. 记录ThreadPoolTaskExecutor线程池的在项目中的实际应用,讲解一下线程池的配置和参数理解。
  17. Nginx的介绍以及编译安装详解
  18. C# listbox DataSource数据绑定--一年半以前的bug
  19. IIS7.0下 HTTP 错误 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求
  20. 换个字体解决Dreamweaver文字选不中的问题

热门文章

  1. nohup程序后台执行
  2. Gradle配置APK自动签名完整流程
  3. 让kindeditor显示高亮代码
  4. ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起
  5. 【SAP业务模式】之ICS(三):前台操作
  6. 一些关于Linux入侵应急响应的碎碎念
  7. TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint
  8. SQL 约束
  9. 跟着老男孩教育学Python开发【第四篇】:模块
  10. 【python之路3】if 语句