以前遇到過這關問題查了一下資料解決了就沒在意,今天又出現這個問題做下記錄加深記憶,也給大家分享一下。
問題:
我們使用Autolayout來佈局UIScrollVie,添加的view不顯示,打印log會看到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));
}];<pre name="code" class="objc">[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.right.equalTo(self.mainScrollView);
make.height.equalTo(@60);
}];
UIScrollView的leading/trailing/top/bottom是相對於自己的ContentSize而不是Bounds來確定的。而ContentSize又是根據子視圖決定的。
上面的代碼產生的結果就是headerView的高和寬都是0。因爲mainScrollView的四邊都是依據ContentSize,這個時候ContentSize又不確定,這樣就導致了ScrollView的子視圖不顯示,子視圖上面的點擊事件不相應等問題。
解決:
__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);
}];
大家有疑問可以評論,一起學習,共勉之!