PlutoView
如果您想了解Pluto
是如何开发的,您可以查看我在medium上的文章
PlutoView
是一个iOS的Swift库,用于添加带有水平滚动标签的折叠/展开头部视图。
主要标签
- Pluto中有3个主要标签:
ScrollViewTab
,TableViewTab
,CollectionViewTab
1- TableViewTab
- 您可以使用此标签来处理表格中的数据,并且可以访问标签内部的可视表来注册单元格和其他属性
class FirstTab : TableViewTab {
override init(frame: CGRect) {
super.init(frame: frame)
initViews()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
private func initViews () {
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self , forCellReuseIdentifier: "cell" )
tableView.backgroundColor = .white
}
}
2- CollectionViewTab
- 您可以使用此标签来处理collectionView中的数据,并且可以访问collectionView内部的可视表来注册单元格和其他属性
class SecondTab : CollectionViewTab {
override init(frame: CGRect) {
super.init(frame: frame)
initViews()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
private func initViews () {
collectionView.collectionViewLayout = UICollectionViewFlowLayout()
collectionView.delegate = self
collectionView.dataSource = self
collectionView.register(CellImage.self , forCellWithReuseIdentifier: "cell")
}
}
3- ScrollViewTab
- 在这个标签中,您可以通过调用
parentView
来访问scrollView及其内部视图,您可以在parentView
内部添加您的组件。但是,当您需要为最后一个组件添加底部锚点时,您可以使用函数addBottomAnchor(view : UIView , constant : CGFloat)
并将最后一个组件和正值传递到底部,例如示例。
如何使用
- 您可以使用以下两种方法使用Pluto:"添加标题"和"不添加标题"。
添加标题
- 您可以使用以下代码来初始化 PlutoView 和添加标题
import UIKit
import PlutoView
class ViewController: UIViewController {
private lazy var collapse : PlutoView = {
let l = PlutoView(maxHeightType: .fixed(float: 250) , headerMinHeight: 70 )
l.delegate = self
l.registerTabs(tabs: [FirstTab.self , SecondTab.self , ThirdTab.self])
return l
}()
private let headerView : HeaderView = {
let l = HeaderView()
return l
}()
override func viewDidLoad() {
super.viewDidLoad()
view = collapse
collapse.addHeader(header: headerView )
}
}
extension ViewController : PlutoDelegate {
func getPageIndex(page: Int) {
}
func didScrollView(_ scrollView: UIScrollView) {
}
func getCountTabs() -> Int {
return 3
}
func tabForIndex(index: Int) -> TabCell? {
if index == 0 {
getPageIndex(page: 0)
let cell = collapse.initTab(type: FirstTab.self, index: index ) as! FirstTab
return cell
}else if index == 1 {
let cell = collapse.initTab(type: SecondTab.self , index: index ) as! SecondTab
return cell
}else if index == 2 {
let cell = collapse.initTab(type: ThirdTab.self , index: index ) as! ThirdTab
return cell
}
return nil
}
}
- 在
PlutoDelegate
中,您必须实现 4 个函数:1- getPageIndex - 在从选项卡滚动到另一个选项卡时使用此函数。2- didScrollView - 在折叠/展开标题时使用此函数。3- getCountTabs - 返回选项卡数量。4- tabForIndex - 您可以使用initTab
函数初始化选项卡,并可以访问这些选项卡。
无标题
- 您可以直接通过传递 None 属性创建 PlutoView 对象,并将其用作选项卡,而不是创建 collectionView 并处理选项卡的横向滚动。
private lazy var collapse : PlutoView = {
let l = PlutoView(maxHeightType: .none , headerMinHeight: 70 )
l.delegate = self
l.registerTabs(tabs: [FirstTab.self , SecondTab.self , ThirdTab.self])
return l
}()
作者
Yusef Naser
许可
PlutoView
根据 MIT 许可证提供。有关更多信息,请参阅 LICENSE 文件。