⭐️ 特性
- 支持 Swift 5。
- 使用指示栏实现页面视图控制器非常简单。
- 简单而功能强大的自定义。
- 完全支持自定义组件。
- 建立在强大且信息丰富的页面视图控制器之上。
- 头部可滚动,如果按钮的宽度大于当前视图的宽度。
📋 要求
LZViewPager 需要 iOS 10,Swift 5。
📲 安装
CocoaPods
LZViewPager 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile
pod 'LZViewPager'
并运行 pod install
。
如果你的 pod 安装不起作用,可能需要更新您的 pod 存储库。您可以尝试
pod repo update
然后运行
pod install
Carthage
LZViewPager 也通过 Carthage 提供。只需使用以下命令通过 Homebrew 安装 carthage
$ brew update
$ brew install carthage
Carthage 依赖项
由于本项目依赖于SnapKit(iOS和OS X的自动布局DSL)。您可以将LZViewPager添加到您的Cartfile
中,如下所示:
github "SnapKit/SnapKit" ~> 5.0.0
github "ladmini/LZViewPager"
Swift Package Manager
dependencies: [
.package(url: "https://github.com/ladmini/LZViewPager", .upToNextMajor(from: "1.2.8"))
]
手动安装
如果您不想使用上述任何依赖项管理器,则可以手动将LZViewPager集成到您的项目中。只需将以下3个文件复制到您的项目中。
- LZViewPager.swift
- LZViewPagerHeader.swift
- LZViewPagerContent.swift
🚀 使用方法
基本用法
-
创建一个
ViewController
并提供一个LZViewPagerDelegate
和LZViewPagerDataSource
-
将一个UIView拖入ViewController的视图中,将其类型设置为LZViewPager,然后设置一个名为"viewPager"的输出变量
-
设置您想显示的项目
-
将hostController设置为self
-
viewPager.reload()
class ViewController: BaseViewController, LZViewPagerDelegate, LZViewPagerDataSource {
@IBOutlet weak var viewPager: LZViewPager!
private var subControllers:[UIViewController] = []
override func viewDidLoad() {
super.viewDidLoad()
viewPager.dataSource = self
viewPager.delegate = self
viewPager.hostController = self
let vc1 = UIViewController.createFromNib(storyBoardId: "ContentViewController1")!
vc1.title = "Title1"
let vc2 = UIViewController.createFromNib(storyBoardId: "ContentViewController2")!
vc2.title = "Title2"
let vc3 = UIViewController.createFromNib(storyBoardId: "ContentViewController3")!
vc3.title = "Title3"
let vc4 = UIViewController.createFromNib(storyBoardId: "ContentViewController4")!
vc4.title = "Title4"
subControllers = [vc1, vc2, vc3, vc4]
viewPager.reload()
}
}
- 实现
LZViewPagerDataSource
。
func numberOfItems() -> Int {
return self.subControllers.count
}
func controller(at index: Int) -> UIViewController {
return subControllers[index]
}
func button(at index: Int) -> UIButton {
//Customize your button styles here
let button = UIButton()
button.setTitleColor(UIColor.black, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 16)
return button
}
- 完成!
🎉
定制
您可以通过datasource方法“func button(at index: Int) -> UIButton”定制您按钮的样式,您也可以通过实现其他datasource方法来定制其他样式,例如
func heightForHeader() -> CGFloat
func backgroundColorForHeader() -> UIColor
func heightForIndicator(at index: Int) -> CGFloat
func colorForIndicator(at index: Int) -> UIColor
func shouldShowIndicator() -> Bool
func widthForButton(at index: Int) -> CGFloat
func widthForIndicator(at index: Int) -> CGFloat
func buttonsAligment() -> ButtonsAlignment
func shouldEnableSwipeable() -> Bool
func leftMarginForHeader() -> CGFloat //default is 0
func rightMarginForHeader() -> CGFloat //default is 0
func shouldShowSeparator() -> Bool // default is false
func colorForSeparator()-> UIColor // default is .white
func heightForSeparator() -> CGFloat // default is 2.0
func leftMarginForSeparator() -> CGFloat //default is 0
func rightMarginForSeparator() -> CGFloat //default is 0
func topMarginForSeparator() -> CGFloat //default is 0
代理
需要时实现代理方法
func didSelectButton(at index: Int)
func willTransition(to index: Int)
func didTransition(to index: Int)
LZViewPager实例方法
当您的数据源发生变化时,应调用reload()方法进行刷新。如果想要编程定位到某个页面,可以调用select(index: Int, animated: Bool)方法,需要注意的是animated是一个可选参数,为了与之前的版本兼容。如果您没有指定animated,则默认为true。
func reload()
public func select(index: Int, animated: Bool = true)
LZViewPager实例属性
public var currentIndex: Int?
如何运行此演示
- 克隆此仓库
- 执行carthage update
- 构建并运行
⚠️ 故障排除
如果您在使用LZViewPager时遇到问题,请发起问题。
👨💻 关于
- 由:Ladmini (发送邮件给ladmini) 创建。
- 得到了更多人的贡献,see 贡献者列表。
- 标志由 Tobaloidee 设计。
❤️ 贡献
欢迎在GitHub上提交bug报告和pull request:https://github.com/ladmini/LZViewPager。
👮🏻♂️ 许可证
该库是根据MIT许可协议开源的。