概览
TopContentPager
?
什么是 TopContentPager
是一个框架,你可以轻松制作出类似于 Instagram 的 MyPage 的分页。
具体来说,这是一个具有常用可滚动的 headerView 和固定在顶部所有页面的 PageSection 的 UIPageViewController。
TopContentPager 的一个重要特性是有一个可以滚动到顶部的常见标题栏。
使用普通的 UIPageViewController 和 UITableView 实现这样的实现非常困难。因为顶部标题栏也需要随 UITableView 滚动。
此外,因为顶部的标题是共同的,所以如果您在任何页面上滚动到顶部,您还需要在所有其他页面上滚动到顶部。有关滚动的其他复杂部分还有很多,但在此省略。有关详细信息,请参阅 Logic
部分。
TopContentPager
让您能够轻松创建这样的页面,而无需担心这些困难的问题。
用法
- 创建基类
首先,您可以创建一个扩展 TopContentPagerViewController
的基类,并向其中添加 TopContentPagerDataSource
。
然后,您必须在其中添加 setupWillLoadDataSource()
函数并在该函数中绑定 dataSource。
class CustomTopContentPagerViewController: TopContentPagerViewController {
override func setupWillLoadDataSource() {
super.setupWillLoadDataSource()
dataSource = self
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension CustomTopContentPagerViewController: TopContentPagerDataSource {
func topContentPagerViewControllerTopContentView(_ viewController: TopContentPagerViewController) -> TopContentView {
// 共通のHeaderViewを返す
TopView()
}
func topContentPagerViewControllerViewControllers(_ viewController: TopContentPagerViewController) -> [ContentTableBody] {
// PageとなるそれぞれのViewController
[Page1ViewController(), Page2ViewController(), Page2ViewController()]
}
}
- 制作内容页面
其次,请将 TopContentTableBody
添加到每个 ViewController 中以使用它们作为页面。
您可以设置 pagerItem. (PagerItem
有 .text
、.image
、.textAndImage
、.custom
类型)
因此,需要将 tableView 设置为 scrollView。
class Page1ViewController: UIViewController, ContentTableBody {
var pagerItem: PagerItem = .text(.init(title: "ページ1"))
var scrollView: UIScrollView!
@IBOutlet weak var tableView: UITableView! {
didSet {
scrollView = tableView
}
}
}
- 制作顶部视图
最后,制作 TopView 扩展 TopContentView
。
class TopView: TopContentView {
// write your custom code
}
这就全部了。你可以使用 TopContentViewController
。如果你需要自定义,请阅读属性部分和示例代码。
逻辑
视图层次结构
TopContentViewController.View
├ ScrollView
| ├ ScrollContentView
| └ ContentTableViewController.View
| └ ContentInnerTableView
| ├ ContentTopCell
| | └ (TopContentView) *When you scroll vertically.
| └ ContentBodyCell
| └ YourPageViewController.View extended ContentTableBody
└ EscapeView
└ (TopContentView) *When you scroll horizontally.
修复可滚动头部视图逻辑
见下方的gif图像,了解滚动逻辑。
抱歉,图片中的 UIView.TopContentProtocol
已过时。现在,你可以使用 TopContentView
。
示例
你可以获取示例代码。它位于本仓库中的 Sample
文件夹。
属性和函数
TopContentPagerViewController
属性 | 访问 | 描述 |
---|---|---|
selectedIndex | get, set | 当前页面索引 |
dataSource | get, set | top视图和页面控制器的数据源 |
delegate | get, set | 参见 TopContentPagerDelegate ,它能够对顶部视图设置TopMargin。 |
viewControllers | get | 含有TableView的内部视图控制器 |
已选视图控制器 | get | 当前页面视图控制器 |
标签高度 | get | 分页项视图的宽度 |
头部高度 | get | 顶部视图的高度 |
顶部间距 | get | 由代理指定的顶部间距高度 |
顶部内容视图
属性 | 访问 | 描述 |
---|---|---|
是否隐藏标签视图 | 获取,覆盖 | 用于隐藏分页项视图的标志 |
标签视图 | get, set | 分页项视图 |
dataSource | get, set | 查阅 TopContentViewDataSource 。如果您不想使用自动布局,可以设置顶部视图高度。 |
标签视图高度 | get | 分页项视图的宽度 |
估算高度 | get | 顶部视图的高度 |
函数 | 描述 |
---|---|
更新分页器(options: UpdatePagerOptions) | 自定义分页项视图。查阅代码中的UpdatePagerOptions 属性。 |
更新布局 | 如果您更新了顶部视图的自动布局,必须调用此方法。 |
分页项
情况 | 描述 |
---|---|
文本 | 您可以设置页面标题文本。(文本和字体) |
图片 | 您可以设置页面标题图片。(图片、大小和边角半径) |
文本和图片 | 您可以设置图片右侧的页面标题文本 |
自定义 | 您可以设置自定义视图作为页面标题。您必须使用PageItemView 协议创建自定义视图。 |
安装
CocoaPods
TopContentPager 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile。
pod "TopContentPager"
需求
- Swift 5 或更高版本
- 适用于 iOS 11.0 或更高版本