IOS的UIScrollView的自動佈局

 IOS的UIScrollView的自動佈局html

標籤:iOS UIScrollView 自動佈局ios

轉載於 http://blog.csdn.net/dongtaochen2039/article/details/41749209 感謝博主的分享。xcode

最近在研究ios開發,遇到的UIScrollView的自動佈局問題,特記錄之。app

終結的要點有:框架

    添加一個AnchorView爲UIScrollView的ContentView肯定寬高。ide


操做以下:佈局

1.咱們須要作什麼。

咱們須要本身完成一個相似於collection view 的功能。完成的效果圖以下:url


上面的標題欄總體是一個view,下面的工做區是scrollview。自動佈局後橫屏效果以下:spa


3.view 結構


最外層的view是根視圖,第一個view(包含兩個button,和p_w_picpathview的)是標題欄。第二個view(包含scrollview的)是scrollview的滑動區,就是上圖的工做區。.net

之因此這麼設計就是將複雜的佈局簡單化,這樣原先標題欄好幾個視圖和scrollview的自動佈局就變成一個view和scrollview的自動佈局。總體框架圖以下:



首先先對區域1和區域2的父view進行自動佈局,他們的自動佈局比較簡單,寫出上下左右的間距便可。

下面咱們主要講解下區域2的佈局。咱們平時對 scrollview進行佈局,咱們知道scroll view除了自身的佈局須要考慮(x, y, width, height)外,還有一個contentSize屬性也必需要在佈局的過程當中進行肯定,contentSize是UIScrollView用於肯定它所 要展現的內容尺寸的大小,而這個contentSize在佈局中其實是又scroll view的子view :content view的寬和高實現的,注意:咱們不能將content view的寬和高的約束設定爲由scroll view決定(如和scroll view等寬、等高),不然,Xcode會有警告:scroll view的content size不肯定!


在這種狀況下,咱們必需要對content view的佈局約束引入scroll view以外其餘參照物,咱們拖進來一個輔助的view做爲參照物or錨點,示意圖以下:



在storyboard中這3個視圖的結構以下:




經過這個參考view,肯定content view的寬度和高度,儘管content view的尺寸能夠不依賴於scroll view,但咱們還不得不設定content view 和其父view的關係:具體而言就是要肯定content view和scroll view的top, bottom, leading和trailing contstraints,這個地方可能比較具備迷惑性,緣由是蘋果對於這四個約束的使用在scroll view中作了變化:它再也不是肯定content view尺寸的依據,而是幫助scroll view中content view四周的邊界(or你能夠理解爲留白),進而肯定scroll view的contentSize屬性。


contentView具體的約束以下:

 

scrllview的約束能夠指定充滿父view,anchor view左邊、右邊、上邊緊挨父視圖。這會xcode會讓你指定anchor view的高度,不然會有***的提示信息。這樣再指定anchor view的高度就能夠了。這會你應該有疑問,anchor view不是用來肯定滑動區域content view的大小的嗎?若是把anchor view的大小寫死,contentView也不就不能改變大小了嗎?咱們須要在代碼裏面動態的更改anchor view的大小,在咱們的代碼裏面也就是高度,由於寬度是屏幕寬度,不用更改。anchor view的高度約束以下圖所示:





這裏我隨便付的值,而後在代碼裏面動態調整高度,修改的代碼以下:

[objc] view plaincopy

  1. //計算contentView的高度  

  2. int rowNums = (appDelegate.workerList.count+COLUMN_COUNT-1)/COLUMN_COUNT;  

  3. int totalHeight = VIEW_HEIGHT * rowNums + (rowNums+1)*MIDDLE_GAP+100;  

  4.   

  5. //找到anchor view的高度約束脩改高度  

  6. NSArray *arrs = scrollAnchorView.constraints;  

  7. for (NSLayoutConstraint *attr in arrs) {  

  8.     if(attr.firstAttribute == NSLayoutAttributeHeight){  

  9.         attr.constant = totalHeight;  

  10.     }  

  11. }  

  12.   

  13. //更新父視圖約束條件  

  14. [scrollAnchorView.superview.superview updateConstraints];  

上面的代碼放在你須要動態肯定contentview高度的地方。修改好以後,就能夠看到剛開始的效果了。

相關文章
相關標籤/搜索