UICollectionView的加載方式和Tableview很像,基本上加載的方法都差不多,尤其是它的數據源的方法和代理方法基本上類似,只不過是名字上有點細微的差別而已。這里面不贅述。
1. UICollectionView為什么要自定義組頭和組尾呢?原因是因為如果不自定義,系統會復用Cell,導致加載的控件出現重復的現象。
如下圖: 綠色的view為組頭,通過視圖發現,組頭上面的控件出現了疊加的現象。
如何解決上面復用的問題,使用initWithFrame的初始化視圖的方法,當cell上的view創建顯示的時候,創建控件。
解決思路:
a. 自定義組頭方法
b. 組頭view顯示的時候就創建控件
c.傳入數據 重寫Set 方法
最終運行效果
由於這個自定義方法很簡單這里就不詳細說明了。
2.下面重點說的是如何使用xib的方法來創建組頭或者組尾的控件。
這里面以創建一個尾部視圖控件為例:
1.手動創建一個空的xib,繼承自ReusableViw
2.創建好xib 一定要重用標識符
3.在.h文件中創建一個自定義的IndexPath屬性
4..m文件中重寫該方法 這里面的Lable是Xib控件中的lable
5.到現在為止已經創建好了自定義的尾視圖文件和xib了,那么回到主函數中去實現加載的方法
注意:組頭和組尾的設置Frame必須要在代理方法中去實現,如果不在代理方法中,設置是無效的具體設置如下圖
6.由於是代碼創建的collectionview,所以必須要注冊
a.注冊組頭的方法 在viewdidload中實現如下代碼
b.注冊組尾的方法
首先這里面有一個bug ,如果你按照上面的注冊方法注冊組尾的話是不可能實現的,因為組頭不是xib,所以可以用上面的方法,而我們的組尾的方法是通過xib的方式實現的,所以要加載xib文件。
這里面有個小bug 先上圖
當使用nib的方式注冊,仿照組頭的創建方式注冊的時候,會發現彈出⚠️,運行的時候會報錯。
原因是找不到組尾的初始化的方法,如何解決呢?
如下圖:
也就是說,當我使用XIB方式進行創建組尾或者組頭的時候,不能使用 類名+Class 的方式進行加載,必須使用系統原有的類名來創建。
最終運行效果圖