A simple, highly informative page view controller for iOS/tvOS that improves upon UIPageViewController.
Pageboy is a Swift library that provides an enhanced page view controller for iOS and tvOS apps. It serves as a direct improvement over Apple's `UIPageViewController`, offering a simplified data source, more reliable delegation, and features like infinite scrolling, dynamic page insertion/deletion, and auto-scrolling. It solves the problem of building complex, navigable page-based interfaces with less boilerplate and more control.
iOS and tvOS developers building apps with page-based navigation, such as onboarding flows, tutorials, tabbed content, or image galleries, who need more reliability and features than `UIPageViewController` provides.
Developers choose Pageboy because it dramatically simplifies working with page view controllers, offering a cleaner API, better delegate callbacks, and advanced features out of the box, all while maintaining full compatibility with Swift and UIKit conventions.
📖 A simple, highly informative page view controller
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Implements PageboyViewControllerDataSource with clear methods like numberOfViewControllers and viewControllerFor, reducing boilerplate compared to UIPageViewController's complex data source.
Provides reliable delegate callbacks such as willScrollToPageAtIndex and didScrollToPage, offering precise control over page transitions and better error handling than native UIPageViewController.
Supports on-the-fly insertion and deletion of pages using insertPage and deletePage functions, with configurable update behaviors similar to UITableView.
Includes built-in infinite scrolling, auto-scrolling via PageboyAutoScroller, and custom animated transitions, which are not easily achievable with standard UIPageViewController.
Requires iOS 14 or later as per the README, making it incompatible with legacy projects that need to support older iOS versions without workarounds.
Built solely on UIKit and UIPageViewController, so it cannot be used natively in SwiftUI-based applications, requiring bridging that adds complexity.
Still requires implementing data source and delegate methods, which might be excessive for very simple, static page views where UIPageViewController would suffice.