Sundial 5.1.22

Sundial 5.1.22

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2021年2月
SPM支持 SPM

Sergei MikhanVladimir BurdukovEugene FilipkovDmitry Duleba 维护。



Sundial 5.1.22

  • Sergei Mikhan

Sundial

UICollectionView 布局,具有包含标题和选择标记的页眉,用于分页导航。

CI Status Version License Platform

示例

要运行示例项目,请克隆仓库,并首先从 Example 目录运行 pod install

要求

安装

Sundial 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod 'Sundial'

使用

1. 入门

将日晷布局集成到常规UICollectionViewLayout中

  let collectionView = CollectionView<CollectionViewPagerSource>()

  collectionView.source.pager = self
  collectionView.collectionViewLayout = CollectionViewLayout(hostPagerSource: collectionView.source) { [weak self] in
    return ["Title1", "Title2", "Title3"]
  }

您需要做的唯一事情是返回标题数组和提供实现Selectable协议。Astrolabe的页面提供者符合该协议。

1.1 设置

Sundial提供通过设置结构对基本UI和行为进行自定义的功能

public struct Settings {
  public var stripHeight: CGFloat
  public var markerHeight: CGFloat
  public var itemMargin: CGFloat
  public var bottomStripSpacing: CGFloat
  public var backgroundColor: UIColor
  public var anchor: Anchor
  public var inset: UIEdgeInsets
  public var alignment: PagerHeaderSupplementaryAlignment
  public var pagesOnScreen: Int
  public var jumpingPolicy: JumpingPolicy
 }

Sundial的一种酷炫特性是“跳跃”。您可以将跳转策略设置为在页面切换时跳过位于彼此较远处的页面,使得看起来像是切换到了邻居页面

1.2 锚点

以下是可能的锚点列表

public enum Anchor {
  case content
  case centered
  case fillEqual
  case equal(size: CGFloat)
  case left(offset: CGFloat)
  case right(offset: CGFloat)
}
内容 居中

左对齐 等宽填充

1.3 自定义装饰视图

这里定义了Sundial布局中的默认装饰视图

public typealias DecorationView = GenericDecorationView<TitleCollectionViewCell, MarkerDecorationView<TitleCollectionViewCell.Data>, DecorationViewAttributes<TitleCollectionViewCell.Data>>
public typealias CollectionViewLayout = GenericCollectionViewLayout<DecorationView>
public typealias CollapsingCollectionViewLayout = GenericCollapsingCollectionViewLayout<DecorationView>

如您所见,您可以配置默认装饰视图本身,提供其他的TitleCellMarkerCell类。或者,如果您的项目需要,如果需要提供其他类型的装饰视图满足DecorationViewPageable协议。例如

  typealias CustomDecoration = GenericDecorationView<CustomTitleCollectionViewCell, CustomMarkerDecorationView, DecorationViewAttributes<CustomTitleCollectionViewCell.Data>>
  typealias CustomLayout = GenericCollectionViewLayout<CustomDecoration>

2. 折叠头部

Sundial也提供了可折叠头部的布局 —— CollapsingCollectionViewLayout。其创建方式几乎与CollectionViewLayout相同。唯一的区别是,你需要提供CollapsingItem协议的实现。

  let collectionView = CollectionView<CollectionViewPagerSource>()
  typealias Layout = CollapsingCollectionViewLayout
  
  let items = [controller1, controller2, controllerLoader, controller4, controller5]
  let layout = Layout(items: items, hostPagerSource: collectionView.source) { [weak self] in
      return self?.titles ?? []
    }

CollapsingItem实现的示例

class TestViewController: UIViewController, Accessor, CollapsingItem {
  let visible = BehaviorRelay<Bool>(value: false)
  var scrollView: UIScrollView {
    return containerView
  }

这就是结果

3. 发布

当使用基于内容的锚点时,你必须提供Distribution中的一个值。

public enum Distribution {
  case left, right, center, proportional, inverseProportional, equalSpacing
}

当提供标题的内容不适合头部宽度时,标题将根据提供的方式进行分布。标题的内容大小来源于标题单元格。默认实现是TitleCollectionViewCell。如果你需要提供自定义大小,你必须实现自己的单元格并提供自定义的Data,它将实现Titleable协议。

0. 缺失的要点

  1. 更多锚点
  2. 在装饰视图中滚动UICollectionView的能力

许可

Sundial遵循MIT许可。更多信息请参阅LICENSE文件。