????作為iOS初學(xué)者,習(xí)慣了用frame來寫控件位置,隨著往下學(xué)習(xí)糊啡,接觸到自動(dòng)布局的使用蠕蚜,然后發(fā)現(xiàn)用frame寫,會(huì)出現(xiàn)一系列問題悔橄。接著我改變以前的習(xí)慣靶累,慢慢學(xué)習(xí)自動(dòng)布局,適應(yīng)用自動(dòng)布局代替frame的使用。在網(wǎng)上找各種資料癣疟,隨后在簡(jiǎn)書找到不錯(cuò)的masonry學(xué)習(xí)文章挣柬,各位可以看看這篇iOS Autolayout之Masonry解讀,應(yīng)該對(duì)初學(xué)者有用睛挚。
Masonry + UIScrollView使用:
? ? 這是我在學(xué)習(xí)自動(dòng)布局的時(shí)候遇到過的問題邪蛔,當(dāng)時(shí)界面寫完,加上布局扎狱,不會(huì)滾動(dòng)侧到?當(dāng)時(shí)心里想,“挖槽淤击,什么情況”匠抗,然后在網(wǎng)上查找資源解決問題.
剛開始寫完是這樣的不會(huì)滑動(dòng)的:
綠色是View,準(zhǔn)備在上面放UIButton的污抬,然后不會(huì)滑動(dòng)就沒添加汞贸。
然后我參考網(wǎng)上的資料绳军,我發(fā)現(xiàn)自己錯(cuò)誤:
給了ContenSize設(shè)置了太小....(其實(shí)當(dāng)時(shí)在masonry不知道怎么設(shè)置)
然后在網(wǎng)上發(fā)現(xiàn)大神們,根本沒有設(shè)置ContenSize的大小矢腻,為什么會(huì)滾動(dòng)呢门驾?
原來把自定義的View添加到scrollView上時(shí),它的大小就是scrollView的contenSize的大小了!多柑!
接著把所有的控件都添加到這個(gè)view上奶是,然后使自定義View底部約束??等于? 自定義View里面的最后一個(gè)控件底部約束。
第一步:
? ? self.scrollview = [[UIScrollView alloc] init];??
? self.scrollview.backgroundColor = [UIColor clearColor];?? ?? ? self.scrollview.showsVerticalScrollIndicator = NO;?
? //增加額外的滾動(dòng)區(qū)域? ?
//self.scrollview.contentInset? = UIEdgeInsetsMake(-20, 0, 44, 0);? ?
// 去掉彈簧效果
//? ? self.scrollview.bounces = NO;?
? [self.view addSubview:self.scrollview];?? ??
? // UIScrollView 對(duì)四邊left top bottom right 進(jìn)行約束竣灌,值均為0聂沙,作為view 的子視圖存在? ? [self.scrollview mas_makeConstraints:^(MASConstraintMaker *make) {? ? ? ? make.top.left.bottom.right.equalTo(self.view);?
? }];
第二步:
//自定義的View??
? //UIScrollView 新增一個(gè)名為v1 視圖UIView,同樣對(duì)其四邊約束帐偎,添加width 相對(duì)父視圖進(jìn)行寬度約束逐纬。(關(guān)鍵的一步蛔屹。需要為UIScrollView 添加一個(gè)子視圖)? ?
//v1 的高度內(nèi)容削樊,決定 這個(gè)滾動(dòng)條會(huì)不會(huì)上下滾動(dòng),影響contentSize?
? UIView *v1 = [[UIView alloc] init];?
? v1.backgroundColor = [UIColor grayColor];
? ? [self.scrollview addSubview:v1];
? ? [v1 mas_makeConstraints:^(MASConstraintMaker *make) {? ? ? ? make.edges.equalTo(self.scrollview);? ? ? ? //上下滾動(dòng)? ? ? ? make.width.equalTo(self.scrollview);? ? ?
? /*?? ? ? ? 和下面的效果一樣? ? ? ?
make.top.mas_equalTo(self.scrollView.mas_top).offset(0);? ? ? ? make.left.mas_equalTo(self.scrollView.mas_left).offset(0);? ? ? ? make.right.mas_equalTo(self.scrollView.mas_right).offset(0);? ? ? ? make.bottom.mas_equalTo(self.scrollView.mas_bottom).offset(0);?? ? ?
??? ? ? ? */
? ? }];?? ?
第三步(重要的一步):
//v1最后一個(gè)控件
? ? ? ? ?UIButton *btn2 = [[UIButton alloc] init];? ?
btn2.titleLabel.textColor = [UIColor whiteColor];?
? btn2.backgroundColor = [UIColor blackColor];?
? [btn2 setTitle:@"點(diǎn)擊報(bào)名" forState:UIControlStateNormal];??
?? ? [v1 addSubview:btn2];
//添加btn2的約束
? ? [btn2 mas_makeConstraints:^(MASConstraintMaker *make) {? ? ? ? make.top.mas_equalTo(laba9.mas_bottom).offset(50);? ? ? ? make.centerX.mas_equalTo(v1);? ? ?
? make.width.and.height.mas_equalTo(80);??
? ? ?? ? }];
? ? //使自定義View底部等于最后一個(gè)控件設(shè)置的底部約束兔毒。? ?
[v1 mas_makeConstraints:^(MASConstraintMaker *make) {? ?
? ? make.bottom.equalTo(btn2.mas_bottom);?
? }];
你會(huì)注意上面的代碼 [v1 mas_makeConstraints…]使用了兩次..
這是沒有錯(cuò)的..雖然v1對(duì)象是一樣的..但約束是不一樣的.
第一個(gè)是對(duì)scrollview 的..第二個(gè)是對(duì)btn2的.
PS:v1這個(gè)視圖是來設(shè)置scrollView的contenSize的大小的.
引用它來實(shí)現(xiàn)scrollView的滾動(dòng).
可以參考一下:
如果有哪里錯(cuò)誤指出漫贞,望大神指出.