以前遇到過這關(guān)問題查了一下資料解決了就沒在意我注,今天又出現(xiàn)這個(gè)問題做下記錄加深記憶儿礼,也給大家分享一下指蚜。
問題:
我們使用Autolayout來布局UIScrollVie献起,添加的view不顯示骂租,打印log會(huì)看到view的寬和高是0祷杈。比如:
__weak typeof(self) weak_self = self;
[self.mainScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(weak_self).insets(UIEdgeInsetsMake(0, 0, buyingViewHeight, 0));
}];
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.equalTo(self.mainScrollView);
make.height.equalTo(@60);
}];
UIScrollView的leading/trailing/top/bottom是相對(duì)于自己的ContentSize而不是Bounds來確定的。而ContentSize又是根據(jù)子視圖決定的渗饮。
上面的代碼產(chǎn)生的結(jié)果就是headerView的高和寬都是0但汞。因?yàn)閙ainScrollView的四邊都是依據(jù)ContentSize,這個(gè)時(shí)候ContentSize又不確定,這樣就導(dǎo)致了ScrollView的子視圖不顯示互站,子視圖上面的點(diǎn)擊事件不相應(yīng)等問題私蕾。
解決:
既然我們直接添加到ScrollView的view不能使用它的約束條件,我們就拋開他重新創(chuàng)建一個(gè)view直接覆蓋到ScrollView上胡桃,這個(gè)view的寬和高等于ContentSize的width和height:
__weak typeof(self) weak_self = self;
[self.mainScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(weak_self).insets(UIEdgeInsetsMake(0, 0, 0, 0));
}];
[self.container mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.mainScrollView);
make.width.height.equalTo(self.mainScrollView);
}];
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.equalTo(self.container);
make.height.equalTo(@60);
}];
大家有疑問可以評(píng)論是目,一起學(xué)習(xí),共勉之标捺!