{"id":15038334,"url":"https://github.com/gametimesf/gtsheet","last_synced_at":"2025-10-04T03:31:55.628Z","repository":{"id":88875737,"uuid":"104006132","full_name":"gametimesf/GTSheet","owner":"gametimesf","description":"An easy to integrate solution for presenting UIViewControllers in a bottom sheet ","archived":true,"fork":false,"pushed_at":"2020-06-15T22:06:18.000Z","size":426,"stargazers_count":279,"open_issues_count":5,"forks_count":33,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-01-23T02:34:27.608Z","etag":null,"topics":["apple","applemusic","bottomsheet","carthage","ios","iphone","sheet","swift","swift-4","transition"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gametimesf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-19T00:30:35.000Z","updated_at":"2025-01-03T07:31:48.000Z","dependencies_parsed_at":"2023-06-12T22:45:19.926Z","dependency_job_id":null,"html_url":"https://github.com/gametimesf/GTSheet","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/gametimesf/GTSheet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gametimesf%2FGTSheet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gametimesf%2FGTSheet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gametimesf%2FGTSheet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gametimesf%2FGTSheet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gametimesf","download_url":"https://codeload.github.com/gametimesf/GTSheet/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gametimesf%2FGTSheet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278259829,"owners_count":25957547,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple","applemusic","bottomsheet","carthage","ios","iphone","sheet","swift","swift-4","transition"],"created_at":"2024-09-24T20:38:03.583Z","updated_at":"2025-10-04T03:31:55.623Z","avatar_url":"https://github.com/gametimesf.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# No Longer Maintained \nGTSheet 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. \n\n\u003cimg src=\"https://github.com/gametimesf/GTSheet/blob/master/sample.png\" width=\"160\"\u003e\n\n# GTSheet\nGTSheet 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.\n\n## Installation\n\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\n### Carthage\n\n    github \"gametimesf/GTSheet\" == 1.1\n\n## Getting Started\n\nThe 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.\n\n### Simple Integration\nGetting 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.\n#### Required: `HalfSheetPresentableProtocol`\nImplement `HalfSheetPresentableProtocol` on the `UIViewController` that you will be presenting in a bottom sheet. \n\n```swift\npublic protocol HalfSheetPresentableProtocol: class {\n    weak var managedScrollView: UIScrollView? { get }\n    var dismissMethod: [DismissMethod] { get }\n    var sheetHeight: CGFloat? { get }\n}\npublic extension HalfSheetPresentableProtocol where Self: UIViewController {\n    func didUpdateSheetHeight()\n}\n```\n\n1.) `managedScrollView` provides a scroll view that will be used to trigger dismissal transitions. For example, a `UITableViewController` should return it's `tableView` property here.\n\n2.) `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`.  \n\n3.) `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.    \n\n#### Optional: `HalfSheetPresentingProtocol`\nAlthough 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.\n\n```swift\npublic protocol HalfSheetPresentingProtocol: class {\n    var transitionManager: HalfSheetPresentationManager! { get set }\n}\n\npublic extension HalfSheetPresentingProtocol where Self: UIViewController {\n    func presentUsingHalfSheet(_ vc: UIViewController, animated: Bool = true)\n    @discardableResult func presentUsingHalfSheetInNC(_ vc: UIViewController, animated: Bool = true) -\u003e UINavigationController\n}\n\n```\n\n### Advanced Features\n#### `HalfSheetCompletionProtocol`\nImplement this on your presenting `UIViewController` to receive a callback when your bottom sheet is dismissed.\n#### `HalfSheetAppearanceProtocol`\nAlthough 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.\n#### `HalfSheetTopVCProviderProtocol`\nBy 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.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgametimesf%2Fgtsheet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgametimesf%2Fgtsheet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgametimesf%2Fgtsheet/lists"}