GridView
GridView 可以在重用视图的同时平铺视图。它有一个像 UIKit 一样的快速 API。即使设备旋转,它也能平滑地重新布局。
Appetize 演示
您可以使用它进行以下操作
- 像翻页一样滚动
- 无限滚动
- 缩放视图
- 类似于
UITableView
调用 API
要求
- Swift 5.0
- iOS 9.0 或更高版本
如何安装
CocoaPods
将以下内容添加到您的 Podfile
pod "G3GridView"
⚠️ 警告:如果您想从CocoaPods
安装,必须在 Podfile 中添加GridView
,因为存在一个不同于此的GridView
。
Carthage
将以下内容添加到您的 Cartfile
github "KyoheiG3/GridView"
概览
GridView 可以像 UITableView
一样在任何方向上滚动,并重复使用单元格。它基于 UIScrollView
,可以进行分页和缩放。如果需要,可以实现左右无限滚动。
GridView 仅是一个 UIScrollView
,但单元格的显示范围取决于父视图。单元格重用也发生在父视图的显示范围内,因此其大小非常重要。
另一方面,缩放和分页取决于 GridView 的位置和大小。'bounds' 对于分页很重要,'frame' 对于缩放很重要。内容偏移也是如此。
以下是视图层级的视觉解释图。
您可以使用它像使用 UITableView
API 一样。然而,还有一个 Column
的概念。以下函数是 'GridView' 的代理 API。
func gridView(_ gridView: GridView, numberOfRowsInColumn column: Int) -> Int
func gridView(_ gridView: GridView, cellForRowAt indexPath: IndexPath) -> GridViewCell
@objc optional func numberOfColumns(in gridView: GridView) -> Int
您可以看到必须返回计数。
示例
此项目包含两个示例:时间表和分页。它们可以更改 Interface Builder 以进行以下操作
尝试这两个示例。
时间表 | 分页 |
---|---|
![]() |
![]() |
使用方法
变量
无限循环
可以实现水平循环。
open var isInfinitable: Bool
- 默认值为
true
。 - 如果不需要视图循环,请将其设置为
false
。
gridView.isInfinitable = true
缩放
内容通过重新布局而不是像 'UIScrollView' 那样进行缩放。
open var minimumScale: Scale
open var maximumScale: Scale
- x 和 y 的默认值是 1。
- 设置垂直和水平缩放。
public var currentScale: Scale { get }
- 获取当前垂直和水平缩放。
gridView.minimumScale = Scale(x: 0.5, y: 0.5)
gridView.maximumScale = Scale(x: 1.5, y: 1.5)
单元格填充
可以在重新布局时决定单元格的位置。
open var layoutWithoutFillForCell: Bool
- 默认值为
false
。 - 如果需要改进视图布局性能,请将其设置为
true
。
False | True |
---|---|
![]() |
![]() |
gridView.layoutWithoutFillForCell = true
内容偏移
如果 isInfinitable
为 true,则 contentOffset
取决于包括循环在内的内容大小。可以获取实际可见的内容偏移量。
open var actualContentOffset: CGPoint { get }
代理
设置委托目标。这个委托属性是 UIScrollViewDelegate
,但实际上设置为 GridViewDelegate
。
weak open var dataSource: GridViewDataSource?
open var delegate: UIScrollViewDelegate?
函数
状态
获取视图状态。
public func visibleCells<T>() -> [T]
public func cellForRow(at indexPath: IndexPath) -> GridViewCell?
public func rectForRow(at indexPath: IndexPath) -> CGRect
public func indexPathsForSelectedRows() -> [IndexPath]
public func indexPathForRow(at position: CGPoint) -> IndexPath
操作
操作视图。
public func contentScale(_ scale: CGFloat)
public func reloadData()
public func invalidateContentSize()
public func invalidateLayout(horizontally: Bool = default)
public func deselectRow(at indexPath: IndexPath)
override open func setContentOffset(_ contentOffset: CGPoint, animated: Bool)
public func scrollToRow(at indexPath: IndexPath, at scrollPosition: GridViewScrollPosition = default, animated: Bool = default)
许可
在 MIT 许可下。详细信息请参阅 LICENSE 文件。