PanModal/README.md

4.5 KiB
Raw Blame History

Screenshot Preview

Platform: iOS 10.0+ Language: Swift 4 CocoaPods compatible Carthage compatible License: MIT

FeaturesCompatibilityInstallationUsageDocumentationContributingAuthorsLicense

Features

  • Supports any subclass 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

pod 'PanModal'
github "slack/PanModal"

Usage

PanModal was designed to be used effortlessly. Simply call presentPanModal in the same way you would expect to present a UIViewController

viewControllerA.presentPanModal(viewControllerB)

The presented view controller must conform to PanModalPresentable to take advantage of the customizable options

extension ViewControllerB: PanModalPresentable {

    var panScrollable: UIScrollView? {
        return nil
    }
}

PanScrollable

If your 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

class ViewControllerC: UITableViewController, PanModalPresentable {

    var panScrollable: UIScrollView? {
        return tableView
    }
}

Adjusting Heights

Height values of the panModal can be adjusted by overriding shortFormHeight or longFormHeight

extension ViewControllerC: PanModalPresentable {

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

  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 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.

Screenshot Preview

Contributing

We're glad to be open sourcing this library. We use it in numerous places within the slack app and expect it to be easy to use as well as modify; we've added extensive documentation within the code to support that.

We will only be fixing critical bugs, thus, for any non-critical issues or feature requests we hope to be able to rely on the community using the library to add what they need. We encourage folks to create forks and are willing to review PRs created by the community. For more information, please read the contributing guidelines.

Authors

Stephen SowoleTosin Afolabi

License

PanModal is released under a MIT License. See LICENSE file for details.