我們一般情況下,自定義的collectionview item排序出來的效果是這樣的!
一般情況下實現(xiàn)效果
這樣就會出現(xiàn)不夠一屏?xí)r,最上面一行無法補齊,或者最重要的,你的產(chǎn)品經(jīng)理覺得你和安卓的顯示有差別!
所以就有重新排序,拿到所有的item 并重新
那么,就要重寫UICollectionViewFlowLayout的類
寫一個類集成于UICollectionViewFlowLayout
func targetPositionWithItem(item: Int, resultX x: inout Int?, resultY y: inout Int?) {
let page = item / (self.itemCountPerRow * self.rowCount)
let theX = item % self.itemCountPerRow + page * self.itemCountPerRow
let theY = item / self.itemCountPerRow - page * self.rowCount
if x != nil {
x = theX
}
if y != nil {
y = theY
}
}
.
func originItemAtX(x: Int, y: Int) -> Int {
let item = x * self.rowCount + y
return item
}
實現(xiàn)效果效果
項目還做了關(guān)于collectionView整屏滑動的實現(xiàn),
就是對所拿到的模型進行整數(shù)填充
// 這是關(guān)于如何讓 item 整屏滑動對模型的操作 就是讓數(shù)組補齊一屏 把空的UI隱藏并對didSelect方法進行判斷
// 這里有第一屏不滿少于5個對整個collectionview的高度進行改變
var activityModel = [lawActivityinfo]() {
didSet {
pageControl.numberOfPages = self.activityModel.count / 8 + 1
if activityModel.count < 5 {
self.mineLayout.rowCount = 1
let fix4 = activityModel.count % 4
let num4 = Int(4 - fix4)
if fix4 > 0 {
for _ in 1...num4 {
let model = lawActivityinfo()
activityModel.append(model)
}
}
self.collectionView.snp.updateConstraints({ (make) in
make.height.equalTo(Screen.autoScaleH(h: 120))
})
pageControl.frame = CGRect(x: 0, y: Screen.autoScaleH(h: 120) + 3, width: Screen.width, height: 10)
} else {
self.mineLayout.rowCount = 2
let fix = activityModel.count % 8
let fixNum = Int(8 - fix)
if fix > 0 {
for _ in 1...fixNum {
let model = lawActivityinfo()
activityModel.append(model)
}
}
self.collectionView.snp.updateConstraints({ (make) in
make.height.equalTo(Screen.autoScaleH(h: 230))
})
pageControl.frame = CGRect(x: 0, y: Screen.autoScaleH(h: 230) + 3, width: Screen.width, height: 10)
}
dog(activityModel.count)
collectionView.reloadData()
}
}
如果還有更好的實現(xiàn)方法請多多指教~~~