只是說明實現瀑布流的方法, 以及自定義layout布局,其他多餘事情本文不提。
先看專案框架:
1.zjjcustommodel 類的內容
#import @inte***ce zjjcustommodel : nsobject
+ (nsarray *)customgettheimagesarray;
@end
#import "zjjcustommodel.h"
@implementation zjjcustommodel
+ (nsarray *)customgettheimagesarray
return arr;
}@end
2.自定義cell(zjjcustomcollectioncell)類
#import @inte***ce zjjcustomcollectioncell : uicollectionviewcell
- (id)initwithframe:(cgrect)frame;
// 自定義 cell 的 label 和 image
@property (nonatomic,strong) uilabel *label;
@property (nonatomic,strong) uiimageview *imageview;
// 名字和文字名字
@property (nonatomic,copy) nsstring *imagename;
@property (nonatomic,copy) nsstring *labelname;
@end
#import "zjjcustomcollectioncell.h"
@implementation zjjcustomcollectioncell
- (id)initwithframe:(cgrect)frame
return self;
}- (void)setimagename:(nsstring *)imagename
- (void)setlabelname:(nsstring *)labelname
@end
3.viewcontroller 類
// 重用cell識別符號
#define reuse_cell @"cell"
#import "viewcontroller.h"
#import "zjjcustomlayout.h"
#import "zjjcustommodel.h"
#import "zjjcustomcollectioncell.h"
@inte***ce viewcontroller ()
@end
@implementation viewcontroller
- (void)viewdidload
#pragma mark - 基礎配置
- (void)creatview
#pragma mark - 獲取資料,填充資料來源
- (void)arrayinfo
#pragma mark - collectionview **方法
- (nsinteger)collectionview:(uicollectionview *)collectionview numberofitemsinsection:(nsinteger)section
- (__kindof uicollectionviewcell *)collectionview:(uicollectionview *)collectionview cellforitematindexpath:(nsindexpath *)indexpath
- (nsinteger)numberofsectionsincollectionview:(uicollectionview *)collectionview
- (void)collectionview:(uicollectionview *)collectionview didselectitematindexpath:(nsindexpath *)indexpath
- (void)didreceivememorywarning
@end
4.zjjcustomlayout 類
#import @inte***ce zjjcustomlayout : uicollectionviewflowlayout
@property (nonatomic, assign) nsinteger itemcount; //元素個數
@end
#define screen_w [uiscreen mainscreen].bounds.size.width
#define screen_h [uiscreen mainscreen].bounds.size.height
#import "zjjcustomlayout.h"
@inte***ce zjjcustomlayout ()
@end
@implementation zjjcustomlayout
- (void)preparelayout else if (i == 1) else if (i == 2) else else
}else else }}
if (columnrecord == 0) else if (columnrecord == 1) else
nsindexpath *indexpath = [nsindexpath indexpathforitem:i insection:0];
uicollectionviewlayoutattributes *attributes = [uicollectionviewlayoutattributes layoutattributesforcellwithindexpath:indexpath];
attributes.frame = cgrectmake(itemx, itemy, _itemw, _itemh);
[_attributesmarray addobject:attributes];
}}- (nullable nsarray<__kindof uicollectionviewlayoutattributes> *)layoutattributesforelementsinrect:(cgrect)rect
- (cgsize)collectionviewcontentsize else
return cgsizemake(screen_w, totalheight);
}@end
到此,就實現wate***ll了,效果如下
iOS 實現 瀑布流介面
前陣子需要做乙個需求,在iphone上實現瀑布流效果。第一眼看到這個需求,我想到的兩種解決方案分別是 1.使用多個uitableview,然後控制它們同時滾動 2.使用乙個uiscrollview,然後參考uitableview的實現自己做乙個符合需求並且以後可以重用的控制項。我首先嘗試了第乙個方案...
iOS 瀑布流的實現方法
瀑布流 又稱瀑布式流式布局,是比較流行的一種頁面布局,視覺表現為參差不齊的多欄布局,可以參考 或者蘑菇街的客戶端。隨著頁面的滾動,這種布局會不斷的載入資料並附加到當前尾部。實現思路 ios上可以使用uiscrollview來實現,假設要展示三列,則每一列可以放乙個uiview,做為容器。載入到資料後...
關於瀑布流
鑑於現今瀑布流的流行,上次面試的時候又遇到了這個問題,可我確實沒有實現過,一時問起確實只知道用float left的方式。1.固定列寬和列數,列設定float left,乙個列就是乙個內容塊,載入內容就選擇載入到各列中 2.使用css3的多列布局 前兩種方式比較簡單,而所謂最大的缺陷也就是列數目已確...