Gitpedia

PageController

Infinite paging controller, scrolling through contents and title bar scrolls with a delay

From hirohisa·Updated May 5, 2026·View on GitHub·

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. The project is written primarily in Swift, distributed under the MIT License license, first published in 2015. Key topics include: carthage, cocoapods, delay, pagecontroller, scrolling.

PageController

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.

sample

Requirements

PageControllerXcodeSwift
0.7.x +9.44.1
0.6.x9.24.0
0.5.x8.23.0
0.4.x8.02.2
0.3.x7.0+2.0
0.2.06.41.2

Features

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

Installation

CocoaPods

ruby
pod 'PageController'

Carthage

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

github "hirohisa/PageController" ~> 0.7.1

Usage

viewControllers

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

swift
import PageController class CustomViewController: PageController { override func viewDidLoad() { super.viewDidLoad() viewControllers = createViewControllers() } func createViewControllers() -> [UIViewController] { let names = [ "favorites", "recents", "contacts", "history", "more", ] return names.map { name -> UIViewController in let viewController = ContentViewController() viewController.title = name return viewController } } }

MenuBar

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

swift
/// 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) }

MenuBarCell

Enable to use Custom Cell supported MenuBarCellable protocol:

swift
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 }

MenuBarCellable

swift
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() }

License

PageController is available under the MIT license.

Contributors

Showing top 3 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from hirohisa/PageController via the GitHub API.Last fetched: 6/1/2026