UICollectionView自定義布局

2021-07-12 02:44:53 字數 3383 閱讀 8232

這個和 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引數來修改,可...