BottomSheet in SwiftUI using UISheetPresentationController
BottomSheet
BottomSheet enables use of UISheetPresentationController in SwiftUI with a simple .bottomSheet modifier.
Credit
This repository is based off an initial implementation by @adamfootdev, with significant components remaining unchanged.
Requirements
- iOS 15+
- Xcode 13+
Integration
Swift Package Manager
BottomSheet can be added to your app via Swift Package Manager in Xcode using the following configuration:
dependencies: [
.package(url: "https://github.com/apptekstudios/BottomSheet.git", from: "1.0")
]
Usage
To get started with BottomSheet, you’ll need to import the framework first:
import BottomSheet
Presenting the Sheet
You can then apply the .bottomSheet modifier to any SwiftUI view, ensuring you attach a binding to the isPresented property – just like the standard .sheet modifier:
.bottomSheet(isPresented: $isPresented) {
Text("Hello, world!")
}
BottomSheet also supports passing an Optional item to it, displaying the sheet if the item is not nil:
// Some optional value
@State var item: String? = "Showing Sheet"
// In your view body
.bottomSheet(item: $item) { item in
Text("\(item)")
}
Customizing the Sheet
BottomSheet can be customized in the same way a UISheetPresentationController can be customized in UIKit. This is done by specifying additional properties in the modifier:
.bottomSheet(
isPresented: $isPresented,
config: .build {
$0.detents = [.medium(), .large()],
$0.prefersEdgeAttachedInCompactHeight = true
},
onDismiss: { print("Dismissed") }
) {
Text("Hello, world!")
}
For more information on UISheetPresentationController, read Apple’s documentation: https://developer.apple.com/documentation/uikit/uisheetpresentationcontroller