Aquaman
类似于淘票票首页,抖音、简书个人主页的嵌套滚动库
要求
- iOS 9.0+
- Swift 4.2+
- Xcode 10+
安装
CocoaPods (推荐)
use_frameworks!
pod 'Aquaman'
用法
首先需要导入 Aquaman
import Aquaman
创建 AquamanPageViewController 子类
import Aquaman
class PageViewController: AquamanPageViewController {
// ...
}
重写以下协议方法以提供 viewController 和相应的数量
override func numberOfViewControllers(in pageController: AquamanPageViewController) -> Int {
return count
}
override func pageController(_ pageController: AquamanPageViewController, viewControllerAt index: Int) -> (UIViewController & AquamanChildViewController) {
// ...
return viewController
}
注意:所提供的 viewController 必须都遵循 AquamanChildViewController
协议,并实现 func aquamanScrollView() -> UIScrollView
方法
import Aquaman
class ChildViewController: UIViewController, AquamanChildViewController {
@IBOutlet weak var tableView: UITableView!
func aquamanChildScrollView() -> UIScrollView {
return tableView
}
// ...
}
重写以下协议方法以提供 headerView 及其高度
override func headerViewFor(_ pageController: AquamanPageViewController) -> UIView {
return HeaderView()
}
override func headerViewHeightFor(_ pageController: AquamanPageViewController) -> CGFloat {
return headerViewHeight
}
重写以下协议方法以提供 menuView 及其高度
override func menuViewFor(_ pageController: AquamanPageViewController) -> UIView {
return menuView
}
override func menuViewHeightFor(_ pageController: AquamanPageViewController) -> CGFloat {
return menuViewHeight
}
Aquaman 采用的是 menuView 和主体功能分离的设计,以满足 menuView 有时候需要深度定制的需求,所以 menuView 需要开发者自己实现,当然这里也提供了现成的 menuView 库:Trident
更新 menuView 的布局
override func pageController(_ pageController: AquamanPageViewController, contentScrollViewDidScroll scrollView: UIScrollView) {
menuView.updateLayout(scrollView)
}
override func pageController(_ pageController: AquamanPageViewController, didDisplay viewController: (UIViewController & AquamanChildViewController), forItemAt index: Int) {
menuView.checkState(animation: true)
}
由于 menuView 和 pageController 不存在强关联关系,所以在滚动的时候需要更新 menuView 布局,在显示相应的 viewController 的时候需要检查 menuView 的状态,具体参考 demo
示例
按照以下 4 个步骤运行示例项目
- 克隆 Aquaman 仓库
- 运行
pod install
命令 - 打开 Aquaman 工作区
- 运行 Aquaman-Demo 项目。
许可
Aquaman遵循MIT许可协议发布。有关详细信息,请参阅LICENSE文件。