swift簡單瀑布流的實現

2021-07-13 15:40:25 字數 3916 閱讀 9338

1.viewcontroller 設定collectionview布局資訊

import

uikit

import

sdwebimage

import

mjrefresh

class

yfwate***llviewcontroller:

uiviewcontroller

,uicollectionviewdatasource

,uicollectionviewdelegate

,uicollectionviewdelegateflowlayout

,yfwate***lllayoutdelegate

func

headerrefresh()

func

footerrefresh()

//資料載入過程

func

loaddata()

self

.collectionview

.reloaddata()

self

.collectionview

.mj_header

.endrefreshing()

self

.collectionview

.mj_footer

.endrefreshing()

} else

}) }

//collectionview

資料來源設定

func

collectionview(collectionview:

uicollectionview

, numberofitemsinsection section:

int) ->

int

//給layout高度,根據比例計算

func

collectionview(collectionview:

uicollectionview

, cellforitematindexpath indexpath:

nsindexpath

) ->

uicollectionviewcell

//layout**

func

wate***lllayout(layout:

uicollectionviewflowlayout

, index:

nsinteger

, width:

cgfloat

) ->

cgfloat

func

columncountofwate***lllayout(layout:

uicollectionviewflowlayout

) ->

nsinteger

override

func

didreceivememorywarning() }

2.cell設定,重新layoutsubviews,防止錯位

import

uikit

class

yfwate***llcollectionviewcell:

uicollectionviewcell }

letimageview :

uiimageview

=uiimageview()

override

init

(frame:

cgrect)

required

init

?(coder adecoder:

nscoder)

//重新布局,否則二次重新整理時由於單元格重用導致錯位

override

func

layoutsubviews()

} 3.自定義

uicollectionviewflowlayout類

import

uikit

protocol

yfwate***lllayoutdelegate

class

yfwate***llcollectionlayout:

uicollectionviewflowlayout

for_in

0..<

columncount //

初始化布局資訊資料來源

attributesarray

= [uicollectionviewlayoutattributes

]()

letcellcount =

self

.collectionview

!.numberofitemsinsection(0

) foriin0

.. letindexpath = 

nsindexpath

(foritem:i, insection:0)

letattributes =

self

.layoutattributesforitematindexpath

(indexpath)

attributesarray

.(attributes!) }

} // 所有單元格位置屬性

override

func

layoutattributesforelementsinrect(rect:

cgrect)

-> [

uicollectionviewlayoutattributes

]?

// 這個方法返回每個單元格的位置和大小

override

func

layoutattributesforitematindexpath(indexpath:

nsindexpath

) ->

uicollectionviewlayoutattributes?

} letx :

cgfloat

=self

.edgeinsets

.left

+cgfloat

(mincolumn) * (width +

self

.columnmargin)

lety :

cgfloat

=cgfloat

(minheight) +

self

.rowmargin

letheight :

cgfloat

= (self

.delegate

?.wate***lllayout

(self

, index: indexpath.

row, width: width))!

attribute.

frame

=cgrectmake

(x, y, width, height)

//        //

更新陣列中的最短列的高度

self

.columnheights

[mincolumn] =

float

(y + height)

return

attribute }

// 內容區域總大小,不是可見區域

override

func

collectionviewcontentsize() ->

cgsize }

return

cgsizemake(0

,cgfloat

(maxheight) +

self

.edgeinsets

.top)

} }

瀑布流簡單實現

使用scrollview簡單實現瀑布流 實現 waterflowview.h import typedefenumwaterfiowviewmargintype class waterflowviewcell,waterfiowview 資料來源方法 protocol waterflowviewda...

簡單瀑布流實現

瀑布流通常2種形式 1.固定n列 固定寬度 列中高度不等,如 花瓣網 列數可根據瀏覽器視覺化視窗大小改變 也可固定 當最低的那列到達可視區的底部,再次載入資料 當前列的offsetheight offsettop scrolltop clientheight 瀑布流 title 6 style 7 ...

簡單html css實現瀑布流

看網上的大牛的瀑布流實現真的頭都大,嫌麻煩,偶發現css新出的column count和break inside屬性就可以輕易實現,下面是實現過程 container item box v for item,index in list key index container item box v f...