利用Storyboard給UIScrollView新增約束

weixin_33872660發表於2016-03-01

之前在專案裡面使用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)如下圖所示。


701353-b1171eb1ed47ada9.png

2.在ScrollView上面新增一個View成為ScrollView的子檢視,點開下面設定約束的4個按鈕的第2個,設定約束距離ScrollView的距離為(0.0.0.0)如下圖所示。


701353-2c443aaa27d51253.png

3.這個時候會發現報錯了,不用緊張~, 先不用管它,我們們繼續往下走。
701353-c7322ec151676a03.png

4.點開下面設定約束的4個按鈕的第一個,選擇 Horizontal Center in Container, 並打上對勾, (如果想要左右滑動就選擇 Vertical Center in Container, 同時實現左右上下則全不選)
701353-7fc603bf6ea3c79b.png

5.再次開啟下面設定約束的4個按鈕的第2個 選擇Height 設定你想要的700. (如果想要左右滑動就選擇 Width, 同時實現左右上下就全部設定)(這個高度是以後執行後Scroller的ContentSize)


701353-020e387cb431fd6a.png

6.設定完成以後發現錯誤不見了,只有一個黃色的警告,這是由於Frame沒有更新導致的,我們來更新下Frame。
701353-5abdc49c50f01941.png

7.接下來我們就可以在這個ScrollView的子檢視View上面來新增控制元件了。 設定約束的時候是相對於父試圖View的哦~。佈局。
701353-e7d1fff4e5ee0285.png

上面的View是設定的固定的一個值。 如果想要動態的設定,就需要把我們剛才加的高度的約束設定成屬性
701353-97ae5a51367b8008.png

起一個名字, height; 然後重寫 -(void)updateViewConstraints 方法,在呼叫super 後 動態的設定height這個約束的constant屬性。
701353-712ac0dbb517d319.png

大功告成!
歡迎關注我的微博部落格

相關文章