這個和 uitableview 在用法上大體上差不多這裡只說明一下 uicollectionview 的布局。
demo
這種布局方式是一種線性布局,他會先按照你設定的要求鋪慢一行,當不滿足指定條件的時候,會換行。
我們可以通過
uicollectionviewdelegateflowlayout
**來控制沒個 cell 和
supplementary view
的大小。
但我覺得這種布局方式,很難滿足我的要求,因此我很少用這個。
layout 物件需要用到 collectionview 的 datasource,其通過自身的 collectionview 屬性來獲得 datasource。
collectionview 完全通過 layout 物件來管理布局。當我們移動、刪除、新增 item 時我們可以通過 invaildatelayout
來重新生成 布局,如果我們只是想更新 item 上的資料直接 reloaddata 就可以了。
當開始布局的時候,系統會依次呼叫如下三個最主要的方法:
1.preparelayout 我們可以在裡面提供布局前的準備工作
2. collectionviewcontentsize 這個方法控制 collectionview 的顯示範圍
3.layoutattributesforelementsinrect:這個方法會告訴 collectionview 在 rect 這個範圍內 item的
uicollectionviewlayoutattributes物件,
這個物件記錄了 item的size和position,fram,其他的一些屬性可以控制 item 的外觀。
在這個方法裡首先呼叫如下三個方法建立不同檢視對應
uicollectionviewlayoutattributes物件:
-(uicollectionviewlayoutattributes
*)layoutattributesforitematindexpath:(
nsindexpath
*)indexpath;
-(uicollectionviewlayoutattributes
*)layoutattributesforsupplementaryviewofkind:(
nsstring
*)elementkind atindexpath:(
nsindexpath
*)indexpath
-(uicollectionviewlayoutattributes
*)layoutattributesfordecorationviewofkind:(
nsstring
*)elementkind atindexpath:(
nsindexpath
*)indexpath
uicollectionviewlayoutattributes的物件的建立方法:
layoutattributesforcellwithindexpath:
layoutattributesforsupplementaryviewofkind:withindexpath
layoutattributesfordecorationviewofkind:withindexpath
注意要根據 item 的型別不同選擇正確的物件建立方法,否則的話會出錯。
總而言之我們要在這個方法裡做如下事情:
1)判斷有多少個 item 在 rect 區域裡
2)為每個在這個區域裡的 item 生成
uicollectionviewlayoutattributes物件,並新增到陣列裡
collection view會在正常的layout 過程之外周期性地讓你提供單個items的layout物件。比如為某item配置插入和刪除動畫時。返回屬性時,不能更新這些layout屬性,如果需要改變layout資訊,呼叫invalidatelayout,在接下來的layout週期中更新這些資訊。上述方法中layoutattributesforitematindexpath:是所有自定義 layout都必須過載的方法,如果有supplementary view和decoration view可以分別過載下面兩個方法。
新增supplementary view到layout中的過程如下:
1 註冊supplementary view到layout物件中,registerclass:forsupplementaryviewofkind:withreuseidentifier: or registernib:forsupplementaryviewofkind:withreuseidentifier:
2 在datasource中實現collectionview:viewforsupplementaryelementofkind:atindexpath:,由於這些view是可重用的,呼叫dequeuereusablesupplementaryviewofkind:withreuseidentifier:forindexpath:來獲取可用的view
cell 的建立類似,cell 和
supplementary view唯一不同的是 cell 只能有乙個
supplementary view可以有多個。
decoration views
是layout ui
特徵的有效點綴,與
cell
和supplementary view
不同的是,它只做外觀呈現用,所以與
datasource
無關。可以用來提供自定義背影,在
cells
縫隙之間填充,甚至可以掩蓋
cell,
它完全由
layout
物件控制。 在
layout
中新增decoration view
步驟如下:
1 用registerclass:fordecorationviewofkind: or registernib:fordecorationviewofkind: method
方法註冊自定義的
decoration view
,但記住是在
layout
物件中註冊
2 layout
物件中layoutattributesforelementsinrect:
方法中為
decoration view
建立屬性
3 實現
layoutattributesfordecorationviewofkind:atindexpath:
方法並在請求時返回
decoration view
的布局屬性
基於以上內容寫了乙個超級課程表:
UICollectionView自定義布局(二)
自定義布局 將該動畫分解,首先實現如下圖所示的效果。隨著collectionview的滑動,itermcell的frame的變化如下圖所示 itermcell分為三種型別 featuredcell 突出顯示的cell,高度為featuredheight。standardcell 標準狀態下的cell...
SharePoint 2013 設定自定義布局頁
在sharepoint中,我們經常需要自定義登陸頁面 錯誤頁面 拒絕訪問等 不知道大家如何操作,以前自己經常在原來頁面改或者跳轉,其實sharepoint為我們提供了powershell命令,來修改這些頁面為我們自己的布局頁。具體設定,可以通過powershell命令的identity引數來修改,可...
SharePoint 2013 設定自定義布局頁
在sharepoint中,我們經常需要自定義登陸頁面 錯誤頁面 拒絕訪問等 不知道大家如何操作,以前自己經常在原來頁面改或者跳轉,其實sharepoint為我們提供了powershell命令,來修改這些頁面為我們自己的布局頁。具體設定,可以通過powershell命令的identity引數來修改,可...