SJSegmentedScrollView
SJSegmentedScrollView 是一个使用 Swift 编写的轻量级通用控制器。它是一个简单的可定制的控制器,您可以将任意数量的 UIViewController 集成到一个带有HeaderView Controller的分段控制器中。
亮点
- 水平滚动以在分段之间切换。
- 垂直滚动以查看内容。
- 所有分段共享单个头部视图。
- 可自定义标题、分段选择颜色、头部大小、分段高度等。
- 支持 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。
捐赠
如果该项目帮助您减少了开发时间,您可以用啤酒赞助我
使用
以下是如何使用 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
程序化更改标签
要程序化更改标签,请使用 SJSegmentedViewController
的 func setSelectedSegmentAt(_ index: Int, animated: Bool)
。
segmentControl.setSelectedSegmentAt(index, animated: true)
作者
Subins Jose, [email protected]
许可证
SJSegmentedScrollView开源协议为MIT。更多详情请参见LICENSE文件。