【原】Masonry+UIScrollView的使用注意事项
2016-01-10 14:19
435 查看
【原】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.参考文章
AutoLayout深入浅出三[相遇Scrollview]UIScrollView 实践经验
相关文章推荐
- Ubuntu 关闭guest用户
- UNIX(2) euid, suid, uid
- Android属性设置android:noHistory="true"
- WPF中使用UI线程
- jmeter java request
- powerbuilder调用dsoframer.ocx组件及操作 pb内嵌word组件及操作
- ui设计的思考
- Android UI系列-----Dialog对话框
- UIButton
- fuel健康检查Heat失败的原因
- DeWeb 研发! Easy UI中控件属性的获取和设置
- 191,使用Reveal查看3D UI
- 史上最完整交互设计基本原则|推荐收藏
- String,StringBuffer以及StringBuilder的差别
- Button UI Kit CSS3美丽Buttonbutton
- Assigning Host USB device to a Guest VM
- iOS 【UIKit-事件产生与传送 练习(重写hitTest和pointInside方法)】
- 专注UI——有用技术:模糊搜索
- IOS 之 UIActivityIndicatorView
- (转)Java中StringBuilder的清空方法比较