{"id":28424996,"url":"https://github.com/aaronlab/dynamicbottomsheet","last_synced_at":"2025-12-30T16:17:01.678Z","repository":{"id":56909197,"uuid":"425415003","full_name":"aaronlab/DynamicBottomSheet","owner":"aaronlab","description":"Customizable Dynamic Bottom Sheet Library for iOS","archived":false,"fork":false,"pushed_at":"2021-12-17T13:27:59.000Z","size":2833,"stargazers_count":15,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-05T10:48:51.354Z","etag":null,"topics":["bottomsheet","cocoapods","ios","library","nostoryboard","spm","swift","swift5","swiftpackage","swiftpackagemanager","uikit"],"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/aaronlab.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}},"created_at":"2021-11-07T04:49:11.000Z","updated_at":"2023-12-09T16:39:10.000Z","dependencies_parsed_at":"2022-08-20T19:50:35.622Z","dependency_job_id":null,"html_url":"https://github.com/aaronlab/DynamicBottomSheet","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/aaronlab/DynamicBottomSheet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronlab%2FDynamicBottomSheet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronlab%2FDynamicBottomSheet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronlab%2FDynamicBottomSheet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronlab%2FDynamicBottomSheet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aaronlab","download_url":"https://codeload.github.com/aaronlab/DynamicBottomSheet/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronlab%2FDynamicBottomSheet/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262371139,"owners_count":23300556,"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","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":["bottomsheet","cocoapods","ios","library","nostoryboard","spm","swift","swift5","swiftpackage","swiftpackagemanager","uikit"],"created_at":"2025-06-05T10:30:57.911Z","updated_at":"2025-12-12T06:05:04.491Z","avatar_url":"https://github.com/aaronlab.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DynamicBottomSheet\n\n[![Platform](https://img.shields.io/cocoapods/p/DynamicBottomSheet.svg?style=flat)](https://cocoapods.org/pods/DynamicBottomSheet)\n[![Language: Swift 5](https://img.shields.io/badge/language-Swift5-orange?style=flat\u0026logo=swift)](https://developer.apple.com/swift)\n![SwiftPM compatible](https://img.shields.io/badge/SPM-compatible-brightgreen?style=flat\u0026logo=swift)\n![CocoaPods compatible](https://img.shields.io/badge/CocoaPods-compatible-brightgreen?style=flat\u0026logo=cocoapods)\n[![Version](https://img.shields.io/cocoapods/v/DynamicBottomSheet.svg?style=flat)](https://cocoapods.org/pods/DynamicBottomSheet)\n[![License](https://img.shields.io/cocoapods/l/DynamicBottomSheet.svg?style=flat)](https://cocoapods.org/pods/DynamicBottomSheet)\n\nFully Customizable Dynamic Bottom Sheet Library for iOS.\n\nThis library doesn't support storyboards.\n\nHowever, you can easily override variables in DynamicBottomSheetViewController and make the bottom sheet programmatically.\n\n## Preview\n\n[![Preview](./resources/preview.gif)](./resources/preview.gif)\n\n## Requirements\n\n- Swift 5\n\n- iOS 10.0 +\n\n- RxSwift 6.0\n\n- RxCocoa 6.0\n\n- RxGesture 4.0\n\n- SnapKit 5.0\n\n- Then 2.0\n\n## Installation\n\n### [CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html)\n\nDynamicBottomSheet is available through [CocoaPods](https://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'DynamicBottomSheet'\n```\n\n```commandline\n$ pod install\n```\n\n### [Swift Package Manager(SPM)](https://www.swift.org/package-manager/)\n\nIn Xcode, add as Swift package with this URL: `https://github.com/aaronLab/DynamicBottomSheet`\n\n## Usage\n\n1. Import `DynamicBottomSheet` on top of your view controller file.\n\n2. Create a class for the bottom sheet where its super class is `DynamicBottomSheetViewController`.\n\n3. Put the view you want to show in the `contentView` of the super class `DynamicBottomSheetViewController`.\n\n4. Make `constraints of the view you made` to the `contentView` above.\n\n5. `Present the bottom sheet view controller` you made before in another view controller.\n\n## Example\n\nFor more examples, clone the repo, and run `pod install` from the Example directory.\n\n```swift\nimport UIKit\nimport DynamicBottomSheet\nimport SnapKit\nimport Then\n\nclass MyStackViewBottomSheetViewController: DynamicBottomSheetViewController {\n\n    // MARK: - Private Properties\n\n    private let stackView = UIStackView()\n        .then {\n            $0.axis = .vertical\n            $0.spacing = 32\n            $0.alignment = .fill\n            $0.distribution = .fillEqually\n        }\n\n}\n\n// MARK: - Layout\n\nextension MyStackViewBottomSheetViewController {\n\n    override func configureView() {\n        super.configureView()\n        layoutStackView()\n    }\n\n    private func layoutStackView() {\n\n        contentView.addSubview(stackView)\n        stackView.snp.makeConstraints {\n            $0.top.equalToSuperview().offset(16)\n            $0.leading.equalToSuperview().offset(16)\n            $0.trailing.equalToSuperview().offset(-16)\n            $0.bottom.equalTo(view.safeAreaLayoutGuide).offset(-16)\n        }\n\n        Array(1...5).forEach {\n\n            let label = UILabel()\n            label.text = \"\\($0)\"\n            stackView.addArrangedSubview(label)\n\n        }\n\n    }\n\n}\n```\n\n```swift\nimport UIKit\n\nclass ViewController: UIViewController {\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        let bottomSheet = MyStackViewBottomSheetViewController()\n        DispatchQueue.main.async {\n            self.present(bottomSheet)\n        }\n    }\n}\n```\n\n## Customization\n\n```swift\n/// The background color of the view controller below the content view.\n///\n/// - `UIColor.black.withAlphaComponent(0.6)` for others.\nopen var backgroundColor: UIColor\n\n/// Background view\nopen var backgroundView: UIView\n\n/// The background color of the content view.\n///\n/// Default value\n/// - `UIColor.tertiarySystemBackground` for iOS 13 or later.\n/// - `UIColor.white` for others.\nopen var contentViewBackgroundColor: UIColor\n\n/// The height of the content view.\n///\n/// Default value is `nil`\n///\n/// If you set this value explicitly, the height of the content view will be fixed.\nopen var height: CGFloat?\n\n/// Content view\nopen var contentView: UIView\n\n/// Corner radius of the content view(top left, top right)\n///\n/// Default value is `16.0`\nopen var contentViewCornerRadius: CGFloat\n\n/// Present / Dismiss transition duration\n///\n/// Default value is 0.3\nopen var transitionDuration: CGFloat\n\n/// Dismiss velocity threshold\n///\n/// Default value is 500\nopen var dismissVelocityThreshold: CGFloat\n```\n\n## Author\n\n[Aaron Lee](https://github.com/aaronLab), aaronlab.net@gmail.com\n\n## License\n\nDynamicBottomSheet is available under the MIT license. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaronlab%2Fdynamicbottomsheet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faaronlab%2Fdynamicbottomsheet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaronlab%2Fdynamicbottomsheet/lists"}