整理 collectionView 瀑布流 布局

2021-07-07 04:13:35 字數 2596 閱讀 6364

layout.h

#import @class waterflowlayout;

@protocol waterflowlayoutdelegate - (cgfloat)waterflowlayout:(waterflowlayout *)waterflowlayout heightforwidth:(cgfloat)width atindexpath:(nsindexpath *)indexpath;

@end

@inte***ce hmwaterflowlayout : uicollectionviewlayout

@property (nonatomic, assign) uiedgeinsets sectioninset;

/** 每一列之間的間距 */

@property (nonatomic, assign) cgfloat columnmargin;

/** 每一行之間的間距 */

@property (nonatomic, assign) cgfloat rowmargin;

/** 顯示多少列 */

@property (nonatomic, assign) int columnscount;

@property (nonatomic, weak) iddelegate;

@end

layout.m

#import "waterflowlayout.h"

//static const cgfloat columnmargin = 10;

//static const cgfloat rowmargin = columnmargin;

@inte***ce waterflowlayout();

/** 這個字典用來儲存每一列最大的y值(每一列的高度) */

@property (nonatomic, strong) nsmutabledictionary *maxydict;

/** 存放所有的布局屬性 */

@property (nonatomic, strong) nsmutablearray *attrsarray;

@end

@implementation hmwaterflowlayout

- (nsmutabledictionary *)maxydict

return _maxydict;

}- (nsmutablearray *)attrsarray

return _attrsarray;

}- (instancetype)init

return self;

}- (bool)shouldinvalidatelayoutforboundschange:(cgrect)newbounds

/** * 每次布局之前的準備

*/- (void)preparelayout

}];return cgsizemake(0, [self.maxydict[maxcolumn] floatvalue] + self.sectioninset.bottom);

}/**

* 返回indexpath這個位置item的布局屬性

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

}];// 計算尺寸

cgfloat width = (self.collectionview.frame.size.width - self.sectioninset.left - self.sectioninset.right - (self.columnscount - 1) * self.columnmargin)/self.columnscount;

cgfloat height = [self.delegate waterflowlayout:self heightforwidth:width atindexpath:indexpath];

// 計算位置

cgfloat x = self.sectioninset.left + (width + self.columnmargin) * [mincolumn intvalue];

cgfloat y = [self.maxydict[mincolumn] floatvalue] + self.rowmargin;

// 更新這一列的最大y值

self.maxydict[mincolumn] = @(y + height);

// 建立屬性

uicollectionviewlayoutattributes *attrs = [uicollectionviewlayoutattributes layoutattributesforcellwithindexpath:indexpath];

attrs.frame = cgrectmake(x, y, width, height);

return attrs;

}/**

* 返回rect範圍內的布局屬性

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

@end

整理心態整理人生

上午把自己所有的工資條全部整理到excel裡面,才發現原來自己從來沒有這麼認真地關注過自己每個月發的工資 說來慚愧,也許是最近工資發得太少,所以才這麼關注,或許人只有在遇到窘境的時候,才會看到那些以前不曾關注的事物,窮則思變,其實也並不是完全指經濟上的一時之窮,而是在現實的壓力之下,不得不考慮往後的...

VIM技巧整理(持續整理)

vim用了好幾年了,但在工作中經常用的小技巧卻只有一小部分。前段時間同事教了我乙個給shell指令碼批量加注釋的小技巧,既讓我再次領教了vim功能的強大和便捷,同時也激發了學習vim的熱情。所以我也蒐羅了一些vim技巧的文章,挑選自己不熟又覺得有用的一些,加以歸類整理,以備時常查閱使用。1 cool...

BASE64加密整理整理

beforeencode為encode之前的字串 那麼encode後的字串長度為 1 如果beforeencode.length 是3的整數倍,那麼長度為 beforeencode.length 3 4 2 如果beforeencode.length 不是3的整數倍,那麼長度為 beforeenco...