關(guān)于UIScrollView的AutoLayout布局是去年學(xué)會的,因為項目中有用到,但今天為了研究UIScrollView的一個屬性,寫了一個UIScrollView的Demo,驚奇的發(fā)現(xiàn)我寫的UIScrollView死活不能滾動,在谷歌查遍了所有的不能滾動原因,還是沒有解決(這個下面也會說),最后才發(fā)現(xiàn)原來是約束的問題(storyboard并沒有紅色的錯誤或黃色的警告提示),所以這篇文章主要作為一個筆記吧,下次忘了也很快能想起來。
這個就不上效果圖了,大概講一下demo構(gòu)成:一個UIViewController,里面一個UIScrollView,UIScrollView里面一個UIView(我們叫他BigV),在大V里面有4個SmallV,我們稱為SmallV_1(紅)、SmallV_2(黃)望侈、SmallV_3(藍(lán))驼壶、SmallV_4(橙).
UIScorllView
對父視圖(View):添加左、上簿废、寬、高四個約束(不解釋了)[1]
BigV
對父視圖(UIScorllView):添加上、左垮兑、下、右四個約束(不解釋了)
滑動的視圖
思想:對父視圖(BigV):添加上漱挎、左系枪、下、右四條約束并對UIScrollView的父視圖(View):添加寬和高的約束,下面具體說說四個SmallV的約束.
SmallV_1:對BigV添加上磕谅、左兩個約束,對View添加寬私爷、高兩個約束
SmallV_2:對BigV添加右邊的約束;對SmallV_1添加上雾棺、水平間隔、寬当犯、高四個約束
SmallV_3:對BigV添加下邊的約束;對SmallV_1添加左垢村、垂直間隔、寬嚎卫、高四個約束
SmallV_4:對SmallV_3添加上嘉栓、水平間隔兩個約束;對SmallV_1添加寬、高兩個約束
從頭到尾不用一句代碼,還是很有效率的,demo點擊下載,歡迎大家Star.
最后說下我在谷歌上查的UIScrollView不能滾動的原因吧:
- 第一肯定是contentSize這個屬性沒有設(shè)置
- 第二個是contentSize設(shè)置的地方不對,我查到的資料上說由于UIScrollView引近AutoLayout以后,如果使用AutoLayout,則要在viewDidAppear方法里設(shè)置contentSize
- 第三個是說把userInteractionEnabled或scrollEnabled屬性設(shè)為NO了
- 第四個是說關(guān)于手勢的傳導(dǎo)問題,即重寫
touchesShouldCancelInContentView
這個方法 - 現(xiàn)在我加第五個,就是約束有問題v
現(xiàn)在按照文章的方法加約束會報錯:Content and frame layout guides before iOS11.0
解決方法:如下圖所示拓诸,把Builds for
改為iOS 11.0 and Later
即可
版權(quán)聲明:本文為 Crazy Steven 原創(chuàng)出品侵佃,歡迎轉(zhuǎn)載,轉(zhuǎn)載時請注明出處奠支!
-
給個例子來理解UIScorllView對父視圖添加約束:假設(shè)A對B添加約束,則first item為A,second item 為B,拖線操作有時候會顛倒first item和second item的位置,需要檢查下調(diào)回來馋辈。 ?