https://github.com/gametimesf/gtsheet
An easy to integrate solution for presenting UIViewControllers in a bottom sheet
https://github.com/gametimesf/gtsheet
apple applemusic bottomsheet carthage ios iphone sheet swift swift-4 transition
Last synced: 3 days ago
JSON representation
An easy to integrate solution for presenting UIViewControllers in a bottom sheet
- Host: GitHub
- URL: https://github.com/gametimesf/gtsheet
- Owner: gametimesf
- License: mit
- Archived: true
- Created: 2017-09-19T00:30:35.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-06-15T22:06:18.000Z (over 5 years ago)
- Last Synced: 2025-01-23T02:34:27.608Z (9 months ago)
- Topics: apple, applemusic, bottomsheet, carthage, ios, iphone, sheet, swift, swift-4, transition
- Language: Swift
- Homepage:
- Size: 416 KB
- Stars: 279
- Watchers: 44
- Forks: 33
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# No Longer Maintained
GTSheet is no longer used internally at Gametime, as we've migrated our apps to React Native. As such, this repository is no logner maintained or supported.
# GTSheet
GTSheet is a a simple, easy to integrate solution for presenting `UIViewController` in bottom sheet. We handle all the hard work for you-- transitions, gestures, taps and more are all automatically provided by the library. Styling, however, is intentionally left out, allowing you to integrate your own design language with ease.## Installation
[](https://github.com/Carthage/Carthage)
### Carthage
github "gametimesf/GTSheet" == 1.1
## Getting Started
The example project included is a great way to try out the features of GTSheet and experiment with some of the more advanced functionality. You can explore integrations for regular a `UIViewController`, a `UIViewController` that includes a `UIScrollView`, such as a `UITableViewController`. You can also explore a more complex example, using functionality to present a `UIViewController` above the bottom sheet.
### Simple Integration
Getting started is easy. You'll need to conform to at least one protocol on the presented `UIViewController`. An optional protocol for your presented `UIViewController` makes presenting a bottom sheet faster and easier.
#### Required: `HalfSheetPresentableProtocol`
Implement `HalfSheetPresentableProtocol` on the `UIViewController` that you will be presenting in a bottom sheet.```swift
public protocol HalfSheetPresentableProtocol: class {
weak var managedScrollView: UIScrollView? { get }
var dismissMethod: [DismissMethod] { get }
var sheetHeight: CGFloat? { get }
}
public extension HalfSheetPresentableProtocol where Self: UIViewController {
func didUpdateSheetHeight()
}
```1.) `managedScrollView` provides a scroll view that will be used to trigger dismissal transitions. For example, a `UITableViewController` should return it's `tableView` property here.
2.) `dismissMethod` provides an array of `DismissMethod` options, such as `.swipe`, `.tap`. You may return all, some, or none of these options. When returning an empty set, you will be responsible for dismissing your own `UIViewController`.
3.) `sheetHeight` provides the height you would like your bottom sheet to be. `UIScrollView` subviews will overflow and scroll as expected. On iOS 11, `Safe Area` insets are automatically respected for you, and added to the total height you return. All `HalfSheetPresentableProtocol` conforming `UIViewControllers` are extended with a `didUpdateSheetHeight` method, which should be called to let the library know that it needs to adjust the height of your bottom sheet.
#### Optional: `HalfSheetPresentingProtocol`
Although you can manually instantiate `HalfSheetPresentationManager` and assign it as your `HalfSheetPresentableProtocol`'s `transitioningDelegate`, conforming to `HalfSheetPresentingProtocol` gives your presenting `UIViewController` several convenience methods for presenting `UIViewControllers` in a bottom sheet.```swift
public protocol HalfSheetPresentingProtocol: class {
var transitionManager: HalfSheetPresentationManager! { get set }
}public extension HalfSheetPresentingProtocol where Self: UIViewController {
func presentUsingHalfSheet(_ vc: UIViewController, animated: Bool = true)
@discardableResult func presentUsingHalfSheetInNC(_ vc: UIViewController, animated: Bool = true) -> UINavigationController
}```
### Advanced Features
#### `HalfSheetCompletionProtocol`
Implement this on your presenting `UIViewController` to receive a callback when your bottom sheet is dismissed.
#### `HalfSheetAppearanceProtocol`
Although most styling can be accomplished by using `UIAppearance`, some advanced changes are simply not possible. This protocol exposes additional styling options that will be handled within the library.
#### `HalfSheetTopVCProviderProtocol`
By conforming to this protocol on your presented `UIViewController`, you are able to provide a `UIViewController` that will fill the unused space above your bottom sheet.