UICollectionView 詳細說明

2021-06-26 04:48:25 字數 2302 閱讀 4526

1。簡單介紹與說明

簡介:uicollectionview提供了一種自定義布局展示試圖內容的方式。

說明:涉及到的必須的基本型別與基本**型別有uicollectionview/uicollectionviewcell/uicollectionviewlayout/uicollectionviewlayoutattributes/

uicollectionviewdelegate,一般情況下有上述幾個就可以了。

uicollectionviewcell顯示的單元格,uicollectionview是容納單元格的容器,uicollectionviewlayout定義布局,uicollectionviewlayoutattributes單

定義單個cell的布局與顯示相關屬性。

2.使用方法:

a.建立uicollectionview,設定datasource,並在datasource裡面實現必要的方法(類似uitableview的)。

b.建立cell:datasource中建立cell,在datasource方法中,這裡與uitableview不同,只要在controllerload的時候呼叫registerclass:forcellwithreuseidentifier:或者類似的方法設定cell的型別,然後就能在datasource必須的方法實現collectionview:cellforitematindexpath:中使用dequeuereusablecellwithreuseidentifier:forindexpath:方法就能獲取到乙個已經建立好的cell,在這裡對其進行一些必要的設定就行。

c.設定layout:呼叫uicollectionview的setcollectionviewlayout:方法設定對應的layout。

d。實現layout:uicollectionviewlayout是乙個抽象類,你可以使用系統已經提供的uicollectionviewflowlayout,也可以自己定義乙個。(初學者可以直接使用uicollectionviewflowlayout作為第一次練習,然後自己實現乙個layout來明白其中原理)

3.layout原理與注意項:

uicollectionviewlayout是乙個抽象的型別,所以在使用的時候需要使用他的子類,ios本身提供了乙個uicollectionviewflowlayout做簡單布局,當然也可以自己派生自己的layout,這時候需要注意:

layout本身一定要處理所有與位置相關的操作,uicollectionview本身的一些與布局相關的方法不能在這裡使用比如:visiblecells:/indexpathsforvisibleitems:).實際上,uicollectionview的這些方法就是通過呼叫layout的相關方法來實現的,同理的還有numberofsections:同類的方法通過呼叫datasource來實現的。

通過上面說明,我們可以想象到,自定義的layout必須能夠單獨實現layout的相關功能,比如計算某個rect中可見cell的indexpath,並能獲取到每個cell的layout attribuate,獲取整個uicollectionview的contentsize等等。

實際上,在uicollectionviewlayout中定義的方法並不是完全的,也並不是完全必須的(其中兩個就是可選的,可以檢視官方文件),但是實現必須的方法,是需要其他的功能輔助.子類需要實現的方法在標頭檔案中列在subclassinghooks下面。

- (uicollectionviewlayoutattributes *)layoutattributesforitematindexpath:(nsindexpath *)indexpath;

- (nsarray *)layoutattributesforelementsinrect:(cgrect)rect;

- (cgsize)collectionviewcontentsize;

以上三個方法是在子類中必須實現的,

第乙個方法獲取某個indexpath下cell的layoutattributes資訊;

最後乙個是計算整個uicollectionview的contentsize,如果計算的大了,有可能會引起crash(具體情況取決於超出的尺寸是否會導致新的cell出現)

第二個獲取在某個區域內(以contentsize為依據)可見cell的attributes資訊,這個函式需要獲取這個可見區域內的indexpath的範圍,而獲取indexpath範圍的方法需要獲取某個點上cell的indexpath的方法,而這個方法又依賴於每個cell的size。

所以實現自定義方法至少還需要在實現上述三個方法之外多實現三個功能點。

沒辦法加上附件,有乙個簡單的**在github上。

**github

位址

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.請求訪問action的路徑,必須以 開頭 type hello.he...

Struts config xml 詳細說明

頁面中表單對應的bean儲存表單資料,驗證 type hello.helloform formbean 對應的包名.類名 name forward1 路徑的邏輯名,此項必須有 path action1.do 指向 或重定向的uri.此項是必需的,必須以 開頭.name forward2 path a...

Linux free m 詳細說明

linux記憶體中buffer與cache的區別 free 命令相對於top 提供了更簡潔的檢視系統記憶體使用情況 free total used free shared buffers cached mem 255268 238332 16936 0 85540 126384 buffers ca...