BottomHalfModal
BottomHalfModal copied to clipboard
A customizable bottom half modal used in merpay
BottomHalfModal

BottomHalfModal is a customizable half modal UI used in merpay.

Installation
Carthage
github "mercari/BottomHalfModal"
CocoaPods
pod "BottomHalfModal"
Usage
BottomHalfModal can present any type of UIVIewController as content. The presented view controller needs to confirm to SheetContentHeightModifiable and define sheetContentHeightToModify that is the height of the half modal. Then call adjustFrameToSheetContentHeightIfNeeded() in viewDidAppear.
import BottomHalfModal
class XXXXViewController: SheetContentHeightModifiable {
var sheetContentHeightToModify: CGFloat = 320
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
adjustFrameToSheetContentHeightIfNeeded()
}
}
Then, call presentBottomHalfModal(_ viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?) to show the content.
let vc = XXXXViewController()
presentBottomHalfModal(vc, animated: true, completion: nil)
If you want to use UINavigationController in BottomHalfModal, use BottomHalfModalNavigationController. It handles content height update while push and pop navigations.
let vc = XXXXViewController()
let nav = BottomHalfModalNavigationController(rootViewController: vc)
presentBottomHalfModal(nav, animated: true, completion: nil)
If you support multiple device orientation, please call adjustFrameToSheetContentHeightIfNeeded() in viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) too.
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
adjustFrameToSheetContentHeightIfNeeded(with: coordinator)
}
Demo
| Basic |
|---|
![]() |
| TableView |
|---|
![]() |
| Navigation |
|---|
![]() |
| StickyButton |
|---|
![]() |
| Input |
|---|
![]() |
Contribution
Please read the CLA carefully before submitting your contribution to Mercari. Under any circumstances, by submitting your contribution, you are deemed to accept and agree to be bound by the terms and conditions of the CLA.
License
Copyright 2019 Mercari, Inc.
Licensed under the MIT License.



