序
這周簡單的做了一個ScrollView的分頁顯示與PageControl聯(lián)合起來的小demo這要涉及到了這些知識,記錄一下.
UIScrollView 屬性:
contentSize
scroll view 的 content size 并不會改變其 bounds 的任何東西氓侧,所以這并不會影響 scroll view 如何組合自己的子視圖。反而胧辽,content size 定義了可滾動區(qū)域帜慢。scroll view 的默認 content size 為 {w:0, h:0}蝙寨。既然沒有可滾動區(qū)域,用戶是不可以滾動的,但是 scroll view 仍然會顯示其 bounds 范圍內(nèi)所有的子視圖基茵。 當 content size 設置為比 bounds 大的時候,用戶就可以滾動視圖了壳影。你可以認為 scroll view 的 bounds 為可滾動區(qū)域上的一個窗口
content offset
content offset的最大值是 content size 和 scroll view size 的差(不同于 content size 和scroll view的 bounds 大小)拱层。這也在情理之中:從左上角一直滾動到右下角,用戶停止時宴咧,滾動區(qū)域右下角邊緣和滾動視圖 bounds 的右下角邊緣是齊平的根灯。你可以像這樣記下 content offset 的最大值:
contentOffset.x = contentSize.width - bounds.size.width;
contentOffset.y = contentSize.height - bounds.size.height;
注:以上的這些來自片段來自https://objccn.io/issue-3-2/
自己在看了這篇文章后對ContentSize 和 Content offset 有了很好的認識,需要的話可以去看看
AutoLayout 下的UIScrolView
這個其實是很困擾我的一件事情,因為如果想要使用自動布局.那么我們就應該知道.以前的frame bounds 這些View屬性都已經(jīng)離我們遠去了.剛開始的時候.我在使用了AutoLayout的情況下,在ViewDidLoad中嘗試去初始化我的ContentSize(使用frame,bounds)結果失敗了.后來我Google之后發(fā)現(xiàn).當我們在storyboard 中設置好約束的時候,我們必須要讓scrollvIew推斷出他的content size的大小
接下來我以自己寫的一個小的demo為例演示一下
添加ScrollView與約束
ScrollView的約束就和普通的view的約束一樣,放到合適的位置就可以,這里不再細說
給ScrollView添加subView
如果你想要讓storyboard判斷出你的ScrollView的ContentSize 有多大,你就必須給ScrollView添加一個subView.然后在subView上面放你想要滾動的view
我這里的ScrollView的層次結構就是這個樣子.解釋一下,因為我想要做的是和圖片相關的一些東西所以這里用StackView把這些包裝起來.你可以在子View上放任何的東西.前提是你需要讓你的ScrollView推斷出Content Size 的大小.
接下來重點來了,如何能推斷出他的ContentSize?
我想先展示一下我的stackview
看見這些藍線了么 這就是我的StackView的大小,也就是我的ContentSize的大小.
如何約束?
我在ScrollView的subview上添加了stackView 但是你可以看到的是我的stackview居然比我的subview還要大
最最重點的就是width 和 height 這兩個約束,讓我的stackView變得如此的大,但是他相對于subview 你可以看到,并沒有左右方向的約束.只是上下的約束.因為我想要實現(xiàn)的是左右滑動,這樣我們就實現(xiàn)了ContentSize的自動推斷.你在設置subview中的子view的大小的時候,要保證子view的大小可以推斷出content size 的大小.這就是最最重點的地方
接下來我們看看subView的約束
設置好了contentsize的大小之后,我們回過頭來看看subview的約束
subview的約束中width 這個約束是非常關鍵的地方,一定要比你的scrollview的width要大
如果比scrollview的width的寬度還小的話.你的ScrollView很有可能滾動不起來!!!!!
如果比scrollview的width的寬度還小的話.你的ScrollView很有可能滾動不起來!!!!!
如果比scrollview的width的寬度還小的話.你的ScrollView很有可能滾動不起來!!!!!
所以你在設置的時候一定要記得ScrollView即使已經(jīng)推斷出來了content size的大小,但是如果你的subview想要滾動起來,那就必須要讓你的subview的寬度,或者高度比你的ScrollView大一些.這樣才能滾動起來
總結
這就是我想要分享給大家的一些ScrollView和AutoLayout的一些有關的方法.一定記得如何判斷出content size 的大小和怎樣才能讓視圖滾動起來.