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...