A SwiftUI view modifier and helper to present a half-screen modal sheet in your iOS apps.
- Interactive drag-to-dismiss gestures
- Configurable close control (drag bar or close button)
- Prevent interactive dismiss when needed
- Dismiss action available via environment
Add the following dependency to your Package.swift:
.package(url: "https://github.com/velos/HalfSheet.git", from: "0.1.0"),Then add "HalfSheet" to your target's dependencies:
targets: [
.target(
name: "YourApp",
dependencies: ["HalfSheet"]
)
]Import the package:
import HalfSheetUse the .halfSheet view modifier to present content:
struct ContentView: View {
@State private var isPresented = false
var body: some View {
Button("Show Half Sheet") {
isPresented = true
}
.halfSheet(isPresented: $isPresented) {
Text("Hello from half sheet!")
.padding()
}
}
}To use item-based presentation:
struct Item: Identifiable, Equatable {
let id = UUID()
let title: String
}
struct ContentView: View {
@State private var selectedItem: Item?
var body: some View {
List(items) { item in
Button(item.title) {
selectedItem = item
}
}
.halfSheet(item: $selectedItem) { item in
Text(item.title)
.padding()
}
}
}public extension View {
func halfSheet(isPresented: Binding<Bool>,
closeType: CloseType = .dragBar,
onDismiss: (() -> Void)? = nil,
@ViewBuilder content: @escaping () -> Content) -> some View
func halfSheet<Item>(item: Binding<Item?>,
closeType: CloseType = .dragBar,
onDismiss: (() -> Void)? = nil,
@ViewBuilder content: @escaping (Item) -> Content) -> some View
}