BottomSheetPresentation
A UIPresentationController
and attendant clases for iOS to present a view controller pinned to the bottom of the screen like an action sheet.
Installation
CocoaPods
To use BottomSheetPresentation with CocoaPods, add a dependency to your Podfile
:
target 'MyAwesomeApp' do
pod 'BottomSheetPresentation'
end
Then run pod install
and use the generated .xcworkspace
to open your project.
Carthage
To use BottomSheetPresentation with Carthage, add a dependency to your Cartfile
:
github "Detroit-Labs/BottomSheetPresentation"
Run carthage update
to build the framework. Then follow the rest of the steps in Carthage’s README to add the framework to your project, configure a Run Script build phase, etc.
Manually
To integrate BottomSheetPresentation manually into your project, drag BottomSheetPresentation.swift
into your Xcode project.
Using BottomSheetPresentation
Swift
To use BottomSheetPresentation, create a BottomSheetPresentationManager
and set it as the transitioningDelegate
of the view controller you want to present, then set the modalPresentationStyle
of the view controller to .custom
.
let manager = BottomSheetPresentationManager() // Save this reference somewhere
let viewControllerToPresent = …
viewControllerToPresent.transitioningDelegate = manager
viewControllerToPresent.modalPresentationStyle = .custom
present(viewControllerToPresent, animated: true, completion: nil)
Objective-C
BottomSheetPresentation also works with Objective-C:
BottomSheetPresentationManager *manager = [[BottomSheetPresentationManager alloc] init];
UIViewController *viewControllerToPresent = …;
viewControllerToPresent.transitioningDelegate = manager;
viewControllerToPresent.modalPresentationStyle = UIModalPresentationCustom;
[self presentViewController:viewControllerToPresent
animated:YES
completion:NULL];
Requirements
To correctly compute the height of the presented view controller, it must either satisfy Auto Layout constraints for a height using systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
or have a non-zero preferredContentSize
.