SJSegmentedScrollView 1.5.0

SJSegmentedScrollView 1.5.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布上次发布2019年5月
SPM支持 SPM

Subins Jose 维护。



SJSegmentedScrollView

CI Status Version License Platform

SJSegmentedScrollView 是一个使用 Swift 编写的轻量级通用控制器。它是一个简单的可定制的控制器,您可以将任意数量的 UIViewController 集成到一个带有HeaderView Controller的分段控制器中。

demo

亮点

  • 水平滚动以在分段之间切换。
  • 垂直滚动以查看内容。
  • 所有分段共享单个头部视图。
  • 可自定义标题、分段选择颜色、头部大小、分段高度等。
  • 支持 Swift 和 Objective-C。
  • 支持多任务。
  • 支持 Refreshcontrol 和自定义下拉刷新库。

安装

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它

$ gem install cocoapods

要使用 CocoaPods 将 SJSegmentedViewController 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

target '<Your Target Name>' do
pod ’SJSegmentedScrollView’, ‘1.3.8'
end

然后,运行以下命令

$ pod install

手动

  • 下载 SJSegmentedViewController。
  • 将 SJSegmentedViewController 目录拖放到您的项目中

要求

  • Xcode 7.3+
  • iOS 9.0+
  • Swift 2.3+

交流

  • 如果您 发现了错误,请打开一个 issue。
  • 如果您 有功能请求,请打开一个 issue。
  • 如果您 想要贡献,请提交一个 pull request。

捐赠

如果该项目帮助您减少了开发时间,您可以用啤酒赞助我🍺 :)

paypal

使用

以下是如何使用 SJSegmentedViewController 的示例。

将 SJSegmentedScrollView 导入到您的 viewcontroller 中

import SJSegmentedScrollView

然后向 SJSegmentedViewController 中添加多个 ViewControllers。您只需按照以下步骤进行。

if let storyboard = self.storyboard {

let headerViewController = storyboard
    .instantiateViewControllerWithIdentifier("HeaderViewController")

let firstViewController = storyboard
    .instantiateViewControllerWithIdentifier("FirstTableViewController")
firstViewController.title = "First"

let secondViewController = storyboard
    .instantiateViewControllerWithIdentifier("SecondTableViewController")
secondViewController.title = "Second"

let thirdViewController = storyboard
    .instantiateViewControllerWithIdentifier("ThirdTableViewController")
thirdViewController.title = "Third"

let segmentedViewController = SJSegmentedViewController(headerViewController: headerViewController,
segmentControllers: [firstViewController,
	secondViewController,
	thirdViewController])
  • 显示 ViewController
self.presentViewController(segmentedViewController, animated: false, completion: nil)
  • 推送 ViewController
self.navigationController?.pushViewController(segmentedViewController,
                                                          animated: true)
  • 添加子 ViewController
addChildViewController(segmentedViewController)
self.view.addSubview(segmentedViewController.view)
segmentedViewController.view.frame = self.view.bounds
segmentedViewController.didMoveToParentViewController(self)

我们已经升级到 Swift 4。对于想使用旧版本的用户,

Swift 3: pod ‘SJSegmentedScrollView’, ‘1.3.6'

Swift 2.3: pod ’SJSegmentedScrollView’, ‘1.3.6'

pod 'SJSegmentedScrollView', :git => 'https://github.com/subinspathilettu/SJSegmentedViewController.git', :tag => 'v1.1.1'

自定义 Segement 标签

默认情况下,SJSegmentedScrollView 会显示 controller.title 作为标签。

firstViewController.title = "First"

您可以通过提供 controller.navigationItem.titleView 来自定义标签视图。

// Custom ImageView
let view = UIImageView()
view.frame.size.width = 100
view.image = UIImage(named: imageName)
view.contentMode = .scaleAspectFit
view.backgroundColor = .white

firstViewController.navigationItem.titleView = view

自定义您的视图

默认情况下,SJSegmentedScrollView 会观察 viewcontroller 的默认视图来生成内容变化和滚动效果。如果您想更改默认视图,则实现 SJSegmentedViewControllerViewSource 并传递您的自定义视图。

func viewForSegmentControllerToObserveContentOffsetChange() -> UIView {
	return view
}

SJSegmentedViewControllerDelegate 代理方法,通过访问当前标签、索引等来帮助定制标签视图。

注意:如果只有一个内容控制器,则标签将被留空。

segmentedViewController.delegate = self

extension ViewController: SJSegmentedViewControllerDelegate {
    
    func didMoveToPage(controller: UIViewController, segment: SJSegmentTab?, index: Int) {
        if segmentedViewController.segments.count > 0 {
            
            let segmentTab = segmentedViewController.segments[index]
            segmentTab.titleColor = .yellow
        }
    }
}

您还可以通过在 SJSegmentedViewController 中使用以下属性来自定义您的控制器。

let segmentedViewController = SJSegmentedViewController()

//Set height for headerview.
segmentedViewController.headerViewHeight = 250.0

//Set height for segmentview.
segmentedViewController.segmentViewHeight = 60.0

//Set color for selected segment.
segmentedViewController.selectedSegmentViewColor = UIColor.redColor()

//Set color for segment title.
segmentedViewController.segmentTitleColor = UIColor.blackColor()

//Set background color for segmentview.
segmentedViewController.segmentBackgroundColor = UIColor.whiteColor()

//Set shadow for segmentview.
segmentedViewController.segmentShadow = SJShadow.light()

//Set bounce for segmentview.
segmentedViewController.segmentBounces = true

//Set font for segmentview titles.
segmentedViewController.segmentTitleFont = UIFont.systemFontOfSize(14.0)

//Set height for selected segmentview.
segmentedViewController.selectedSegmentViewHeight = 5.0

//Set height for headerview to visible after scrolling
segmentedViewController. headerViewOffsetHeight = 10.0

程序化更改标签

要程序化更改标签,请使用 SJSegmentedViewControllerfunc setSelectedSegmentAt(_ index: Int, animated: Bool)

segmentControl.setSelectedSegmentAt(index, animated: true)

作者

Subins Jose, [email protected]

许可证

SJSegmentedScrollView开源协议为MIT。更多详情请参见LICENSE文件。