iOS 版面實現記錄四

2021-07-03 03:01:48 字數 3596 閱讀 1430

同樣使用 uicollectionview 來實現,自定義乙個 uicollectionviewlayout 即可。uicollectionview 可以看作是具備復用控制項的 scrollview。自定義則是通過某些演算法得到每乙個控制項在 content 上的位置,並設定它具備的形態。該 uicollectionviewlayout 中獲取並返回乙個自定義的 uicollectionviewlayoutattributes。
當uicollectionview在獲取布局時將針對每乙個indexpath的部件(包括cell,追加檢視和裝飾檢視),向其上的uicollectionviewlayout例項詢問該部件的布局資訊(在這個層面上說的話,實現乙個uicollectionviewlayout的時候,其實很像是zap乙個delegate,之後的例子中會很明顯地看出),這個布局資訊,就以uicollectionviewlayoutattributes的例項的方式給出。

簡單地說就是 collectionview 找 uicollectionviewlayout 要布局資訊。uicollectionviewlayout 就給出 uicollectionviewlayoutattributes 的例項。uicollectionviewlayout 在這過程中像提款機,uicollectionviewlayoutattributes就像提款機中的錢。uicollectionview 需要錢,按提款機就行。

繼承uicollectionviewlayout類,然後過載下列方法:

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

- (uicollectionviewlayoutattributes *)layoutattributesforsupplementaryviewofkind:(nsstring *)elementkind atindexpath:(nsindexpath *)indexpath;

- (uicollectionviewlayoutattributes *)layoutattributesfordecorationviewofkind:(nsstring*)elementkind atindexpath:(nsindexpath *)indexpath;

通過對應方法返回對應 attribute

+ (instancetype)layoutattributesforcellwithindexpath

:(nsindexpath *)indexpath;

+ (instancetype)layoutattributesforsupplementaryviewofkind

:(nsstring *)elementkind

withindexpath

:(nsindexpath *)indexpath;

(instancetype)layoutattributesfordecorationviewofkind

:(nsstring *)decorationviewkind

withindexpath

:(nsindexpath*)indexpath;

下面是一種實現

#pragma mark - 

//// jdcollectionviewlayout.m

// jasoncaodemoproject

//// created by 曹 景成 on 15/6/4.

//@inte***ce

jdcollectionviewlayout : uicollectionviewlayout

@property (nonatomic, assign) nsinteger cellcount;

@property (nonatomic) cgsize headerreferencesize;

@end

@implementation

jdcollectionviewlayout

- (void)preparelayout

- (cgsize)collectionviewcontentsize

- (uicollectionviewlayoutattributes *)layoutattributesforitematindexpath:(nsindexpath *)path

else

if (indexforsix == 1)else

if(indexforsix == 3)

if(indexforsix == 4)

if(indexforsix == 5)

}attributes.center = cgpointmake(x+attributes.size

.width/2, y+attributes.size

.height/2);

return attributes;

}//使用 reveal 檢視 headerview 被加了8個,只有乙個 view 包含 sakurascrollview

- (uicollectionviewlayoutattributes *)layoutattributesforsupplementaryviewofkind:(nsstring *)elementkind atindexpath:(nsindexpath *)indexpath

-(nsarray*)layoutattributesforelementsinrect:(cgrect)rect

nsindexpath* indexpath = [nsindexpath indexpathforitem:0 insection:0];

[attributes addobject:[self layoutattributesforsupplementaryviewofkind:@"header" atindexpath:indexpath]];

return attributes;

}@end

使用如下

- (void)initcontentcollectionview
另外還有類似的第三方庫

ramcollectionviewflemishbondlayout

對 ramcollectionviewflemishbondlayout 庫其中一段計算 cell 的原點y值**注釋記錄

//獲取每乙個cell的原點y值

- (cgfloat)getyatindexpath:(nsindexpath *)indexpath

else else

if (position == 6 && position == 7) else

}if (indexpath.section > 0)

return yvalue;

}

uicollectionview之自定義布局

ios6新特徵:uicollectionview介紹

iOS 版面實現記錄三

實現該介面花了點功夫。基本思路是通過實現 uicollectionviewdelegateflowlayout 的 方法 cgsize collectionview uicollectionview collectionview layout uicollectionviewlayout colle...

ios 經驗記錄

日下內容為日常開發中遇到的問題解決的個人經驗記錄 1.ios 用xib折騰cell時候 整個cell不能命名為contentview 會與系統的contentview衝突 一般命名為viewcell.使用xib時候 命名不能與所在類命名衝突 否則會出現各種奇怪事情。2.tableview手勢監聽在資...

ios學習記錄

git 上 clone 下來 pod install 出錯 使用 pod update verbose 下拉上部 frame 改變 中文 轉 nsstring ios xcode 注釋 todo fixme mark ios nsurlcache 快取策略 cachepolicy 儲存到 cache...