本文轉載請註明出處 —— polobymulberry-博客園html
我想實現的使用在一個UIScrollView依次添加三個UITableView(tableView一、tableView二、tableView3)。最後想達到的效果就像下圖這樣:git
或者用這張圖更形象點:github
而後個人代碼大概的樣子函數
// 自定義了一個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。問題就是我約束都設置好了,爲何還會出現問題?ui
出現使用autolayout後,view的寬高均爲0。極可能是由於約束設置出錯。搜索了無數文章,嘗試了無數可能後,我以爲問題極可能處在scrollView上。因此我搜索autolayout+UIScrollView,還真發現了UIScrollView在Autolayout使用下的一些問題。最主要的問題就是:spa
當我使用make.leading.mas_equalTo(self.mas_leading) 的時候,其實這裏的self.mas_leading指的是scrollView的contentSize的那個leading。code
有沒有發現,此時個人contentSize尚未指定,由於他是我在_scrollView = [[ICScrollView alloc] init]; 後面添加的,而此時約束已經完成了。因此最簡單的辦法是把_scrollView.contentSize = CGSizeMake(width, height); 放到layoutScrollSubViews以前,就能夠啦!具體按照你的代碼習慣添加吧。htm