示例
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
特点
UGrid提供三种不同的单元格大小。在它们之间切换,并让UGridFlowLayout处理剩余部分。所有空余空间都将被利用。UGridView乐于成为Windows Phone主界面网格视图:)
实现
只需将 UGridFlowLayout
的实例分配给你的集合视图的 collectionViewLayout
属性,然后就可以使用了。
import UIKit
import ugrid
class ViewController: UIViewController {
private var _layout = UGridFlowLayout()
private var _layoutType: LayoutType = .less
override func viewDidLoad() {
super.viewDidLoad()
collectionView.collectionViewLayout = _layout
}
}
在布局类型之间切换
有两种布局类型:less
或more
在less
类型的一行中将有
- 4个小网格项
- 2个中等网格项
- 1个大网格项,且不会为任何其他网格项留出空间
在more
类型的一行中将有
- 6个小网格项
- 3个中等网格项
- 1个大网格项,但同一行中会有空间容纳4个小网格项或1个中等项
可以通过调用setType(_:)
并传递特定的布局类型
来切换布局类型
...
override func viewDidLoad() {
...
_layoutType.toggle()
_layout.setType(_layoutType)
...
}
...
切换尺寸
在 UGridFlowLayout
实例上调用 toggleSize(forIndexPath:)
函数。布局将自动在小型、中型和大型尺寸之间切换
...
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
_layout.toggleSize(forIndexPath: indexPath)
}
...
如果商品在商店中还没有尺寸信息,默认将使用 小型
尺寸。您可以通过在 UGridFlowLayout
实例上调用 setDefaultGridSize(_ size: SizeType)
来更改默认尺寸
...
override func viewDidLoad() {
...
_layout.setDefaultGridSize(.middle)
...
}
...
之后,新添加的项目将使用 中型
尺寸,而不是默认的 小型
。
保存更改
为了简化,我们使用UserDefaults
来保存每个cell索引的尺寸。如果你仍然想自己处理保存操作,请查看更改行为部分
如果你想清除所有保存的项目尺寸,请在UGridFlowLayout
实例上调用resetItemsSizes()
...
override func viewDidLoad() {
...
_layout.resetItemsSizes()
...
}
...
变更行为
UGrid仍在开发中。它尽力提供最快的重排单元计算时间、最简单的实现和可用性。尽管如此,如果你有更好的计算想法(这很可能是),你可以通过简单地采用 IGridCalculation
协议来创建自己的计算类,并使用 UGridFlowLayout
实例上的 setCalculationLogic(_:)
来更改计算逻辑。另外,如果你希望自己存储尺寸,可以通过在 UGridFlowLayout
实例上调用 setSizeRepository(_:)
来采用 IGridSizeRepository
协议并设置新的存储机制。
要更改一行中的网格项目计数,只需创建一个符合 IGridItemsInRow
的类,并将其设置到 UGridFlowLayout
实例。例如,要将less
模式下一行的项目数从默认的 4 个更改为 3 个,创建一个名为 CustomSizeCountInrow
的新类。
class CustomSizeCountInrow: IGridItemsInRow {
func itemsInRow(forSizeType size: SizeType, andLayoutType layout: LayoutType) -> CGFloat {
switch layout {
case .less:
switch size {
case .small:
return 3
case .middle:
return 1.5
case .big:
return 1
}
case .more:
switch size {
case .small:
return 6
case .middle:
return 3
case .big:
return 1
}
}
}
}
并设置它
...
override func viewDidLoad() {
...
_layout.setGridItemsInRow(CustomSizeCountInrow())
...
}
...
计划要做什么
- 支持章节。目前仅支持一个章节
- 拖放支持
需求
- XCode 11+
- iOS 11+
安装
ugrid 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'ugrid'
作者
错误创建者
许可证
ugrid 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。