之前在項目里面使用Storyboard的時候也會遇到UIScrollview,因為不知道怎么給scrollview添加約束,UIScrollview適配很是麻煩,尤其是針對滾動在iPhone4超出屏幕卻在iPhone6 上不超出的狀況,所以每次都是代碼,但是每次都感覺這樣做很low,但是苦于項目很急,一直沒有抽時間研究下,現在給大家貼出來好久就想寫出來的解決方法。
在StoryBord拖過scrollview,添加約束的時候發現他并不會按照你猜想的去執行。經過查閱資料,大致知道了原因。這是由于scrollview本身contentSize、contentInsets等復雜的特性導致,蘋果文檔在講autolayout的時候甚至專門拿出一節講如何對scrollview進行自動布局。解決方案可以給scrollview添加一個唯一的子視圖,大小和scrollview一樣,然后所有原計劃添加到scrollview上面的控件,都添加在子視圖上面。步驟如下:
1.首先在我們的Controller自帶的View里面添加一個scrollview,點開下面設置約束的4個按鈕的第2個,約束設置距離父試圖的距離為(0,0,0,0)如下圖所示。
2.在ScrollView上面添加一個View成為ScrollView的子視圖,點開下面設置約束的4個按鈕的第2個,設置約束距離ScrollView的距離為(0.0.0.0)如下圖所示。
3.這個時候會發現報錯了,不用緊張~, 先不用管它,咱們繼續往下走。
4.點開下面設置約束的4個按鈕的第一個,選擇 Horizontal Center in Container, 并打上對勾, (如果想要左右滑動就選擇 Vertical Center in Container, 同時實現左右上下則全不選)
5.再次打開下面設置約束的4個按鈕的第2個 選擇Height 設置你想要的700. (如果想要左右滑動就選擇 Width, 同時實現左右上下就全部設置)(這個高度是以后運行后Scroller的ContentSize)
6.設置完成以后發現錯誤不見了,只有一個黃色的警告,這是由于Frame沒有更新導致的,我們來更新下Frame。
7.接下來我們就可以在這個ScrollView的子視圖View上面來添加控件了。 設置約束的時候是相對于父試圖View的哦~。布局。
上面的View是設置的固定的一個值。 如果想要動態的設置,就需要把我們剛才加的高度的約束設置成屬性
起一個名字, height; 然后重寫 -(void)updateViewConstraints 方法,在調用super 后 動態的設置height這個約束的constant屬性。