接到任务 显示分类的信息,可以有多个分类可以 选择,横向可以滑动,并可以分页。
最终 效果图
效果图第1页 效果图第2页
实现方法用UICollectionView ,每个页面是一个section,共2个section。第一个section 返回8 个Item;第二个section 也返回8个item,3个正常显示,超过3个的,显示空白 UICollectionViewCell
然而到这里 的效果却是这样,看下图
效果第1页 效果第2页看下思路图
想要的布局
可是显示的布局却是
collectionview默认布局
下一步要怎么办?
item 1的布局 = 默认 item2 的布局就行了。整体的布局修改就行了
0246
1357 改成
0123
4567
from lizhi荔枝
原文
上代码
//
// PageCollectionViewLayout.swift
// VoicePlay
//
// Created by LiZhi on 2021/7/11.
// Copyright © 2021 Corpize. All rights reserved.
// 简书:https://www.jianshu.com/p/a067f5f28fab
import UIKit
class PageCollectionViewLayout: UICollectionViewFlowLayout {
var allAttributes = [UICollectionViewLayoutAttributes]()
override func prepare() {
super.prepare()
allAttributes.removeAll()
let sectionCount = collectionView?.numberOfSections ?? 0
for section in 0 ..< sectionCount {
let itemCountInASection = collectionView?.numberOfItems(inSection: section) ?? 0
for itemIndex in 0 ..< itemCountInASection {
let indexpath = IndexPath(item: itemIndex, section: section)
let attributes = layoutAttributesForItem(at: indexpath)
if let attri = attributes {
allAttributes.append(attri)
}
}
}
}
override func layoutAttributesForElements(in _: CGRect) -> [UICollectionViewLayoutAttributes]? {
return allAttributes
}
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
let itemNew = indexPath.row
var itemOld = itemNew
switch itemNew {
case 0:
itemOld = 0
case 1:
itemOld = 2
case 2:
itemOld = 4
case 3:
itemOld = 6
case 4:
itemOld = 1
case 5:
itemOld = 3
case 6:
itemOld = 5
case 7:
itemOld = 7
default:
itemOld = itemNew
}
let attribute = super.layoutAttributesForItem(at: indexPath)?.copy() as? UICollectionViewLayoutAttributes
let oldAttributes = super.layoutAttributesForItem(at: IndexPath(item: itemOld, section: indexPath.section))
attribute?.frame = oldAttributes?.frame ?? CGRect.zero
return attribute
}
}
码字不易,转载请标明出处 from lizhi荔枝
网友评论