同樣使用 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...