ugrid 0.3.12

ugrid 0.3.12

Bug Creator 维护。



ugrid 0.3.12

  • 作者:
  • BugCreator

Version License Platform SPM compatible

示例

要运行示例项目,请克隆仓库,然后首先从 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
   }
}

在布局类型之间切换

有两种布局类型:lessmore

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