Awesome Open Source
Awesome Open Source


Build-Status CocoaPods Carthage compatible license

PageController is infinite paging controller, scrolling through contents and title bar scrolls with a delay. Then it provide user interaction to smoothly and effortlessly moving. It is for iOS written in Swift.



PageController Xcode Swift
0.7.x + 9.4 4.1
0.6.x 9.2 4.0
0.5.x 8.2 3.0
0.4.x 8.0 2.2
0.3.x 7.0+ 2.0
0.2.0 6.4 1.2


  • [x] To inherit from DCScrollView
  • [x] Use UIViewController, not UIView like UITabBarController
  • [x] Support AutoLayout about MenuCell
  • [x] Handling to change current view controller with Delegate.
  • [x] Scrolling smoothly and effortlessly
  • [x] Keep to smoothly in scrolling contents



pod 'PageController'


To integrate PageController into your Xcode project using Carthage, specify it in your Cartfile:

github "hirohisa/PageController" ~> 0.7.1



Type is [UIViewController], and element must have title.

import PageController

class CustomViewController: PageController {

    override func viewDidLoad() {

        viewControllers = createViewControllers()

    func createViewControllers() -> [UIViewController] {
        let names = [

        return { name -> UIViewController in
            let viewController = ContentViewController()
            viewController.title = name
            return viewController


Enable to change backgroundColor, frame. If you change MenuBarCell.height, then override frameForMenuBar and set height.

/// backgroudColor
menuBar.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.9)
/// skip to auto-select after scrolling
menuBar.isAutoSelectDidEndUserInteractionEnabled = false

/// frame, override this function
override var frameForMenuBar: CGRect {
    let frame = super.frameForMenuBar

    return CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: 60)


Enable to use Custom Cell supported MenuBarCellable protocol:

public protocol MenuBarCellable {
    var index: Int { get set }
    func setTitle(_ title: String)
    func setHighlighted(_ highlighted: Bool)
    func prepareForReuse()

public func register(_ cellClass: MenuBarCellable) {
    guard let cellClass = cellClass as? UIView.Type else { fatalError() }
    self.cellClass = cellClass

public func register(_ nib: UINib) {
    self.nib = nib


public protocol MenuBarCellable {

    // it's used by PageController
    var index: Int { get set }

    // it is used to set to Label.text, caused by deprecating MenuCell over 0.7
    func setTitle(_ title: String)

    // it's instead of `updateData` over 0.7,
    func setHighlighted(_ highlighted: Bool)

    // Called by the menu bar on creating the instance.
    func prepareForUse()



PageController is available under the MIT license.

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
swift (7,535
cocoapods (561
carthage (321
scrolling (89
delay (18

Find Open Source By Browsing 7,000 Topics Across 59 Categories