# PanModal **Repository Path**: commind-vender/PanModal ## Basic Information - **Project Name**: PanModal - **Description**: PanModal - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-08 - **Last Updated**: 2025-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### PanModal is an elegant and highly customizable presentation API for constructing bottom sheet modals on iOS.
Features • Compatibility • Installation • Usage • Documentation • Contributing • Authors • License
Read our blog on how Slack is getting more :thumbsup: with PanModal Swift 4.2 support can be found on the `Swift4.2` branch.
## Features * Supports any type of `UIViewController` * Seamless transition between modal and content * Maintains 60 fps performance ## Compatibility PanModal requires **iOS 10+** and is compatible with **Swift 4.2** projects. ## Installation * CocoaPods: ```ruby pod 'PanModal' ``` * Carthage: ```ruby github "slackhq/PanModal" ``` * Swift Package Manager: ```swift dependencies: [ .package(url: "https://github.com/slackhq/PanModal.git", .exact("1.2.6")), ], ``` ## Usage PanModal was designed to be used effortlessly. Simply call `presentPanModal` in the same way you would expect to present a `UIViewController` ```swift .presentPanModal(yourViewController) ``` The presented view controller must conform to `PanModalPresentable` to take advantage of the customizable options ```swift extension YourViewController: PanModalPresentable { var panScrollable: UIScrollView? { return nil } } ``` ### PanScrollable If the presented view controller has an embedded `UIScrollView` e.g. as is the case with `UITableViewController`, panModal will seamlessly transition pan gestures between the modal and the scroll view ```swift class TableViewController: UITableViewController, PanModalPresentable { var panScrollable: UIScrollView? { return tableView } } ``` ### Adjusting Heights Height values of the panModal can be adjusted by overriding `shortFormHeight` or `longFormHeight` ```swift var shortFormHeight: PanModalHeight { return .contentHeight(300) } var longFormHeight: PanModalHeight { return .maxHeightWithTopInset(40) } ``` ### Updates at Runtime Values are stored during presentation, so when adjusting at runtime you should call `panModalSetNeedsLayoutUpdate()` ```swift func viewDidLoad() { hasLoaded = true panModalSetNeedsLayoutUpdate() panModalTransition(to: .shortForm) } var shortFormHeight: PanModalHeight { if hasLoaded { return .contentHeight(200) } return .maxHeight } ``` ### Sample App Check out the [Sample App](https://github.com/slackhq/PanModal/tree/master/Sample) for more complex configurations of `PanModalPresentable`, including navigation controllers and stacked modals. ## Documentation Option + click on any of PanModal's methods or notes for detailed documentation.