G3GridView 0.8.0

G3GridView 0.8.0

Kyohei Ito 维护。



  • Kyohei Ito

GridView

Build Status Carthage compatible Version License Platform

GridView 可以在重用视图的同时平铺视图。它有一个像 UIKit 一样的快速 API。即使设备旋转,它也能平滑地重新布局。

timetable timetable

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' 对于缩放很重要。内容偏移也是如此。

以下是视图层级的视觉解释图。

Hierarchy

您可以使用它像使用 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 以进行以下操作

Example

尝试这两个示例。

时间表 分页
timetable paging

使用方法

变量

无限循环

可以实现水平循环。

open var isInfinitable: Bool
  • 默认值为 true
  • 如果不需要视图循环,请将其设置为 false

loop

gridView.isInfinitable = true

缩放

内容通过重新布局而不是像 'UIScrollView' 那样进行缩放。

open var minimumScale: Scale
open var maximumScale: Scale
  • x 和 y 的默认值是 1。
  • 设置垂直和水平缩放。
public var currentScale: Scale { get }
  • 获取当前垂直和水平缩放。

scaling

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
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 文件。