Updated for Xcode 14.2
Updated in iOS 15
SwiftUI’s sheets are used to present new views over existing ones, while still allowing users to drag down to dismiss the new view when they are ready.
To use a sheet, give it something to show (some text, an image, a custom view, etc), add a Boolean that defines whether the detail view should be showing, then attach it to your main view as a modal sheet.
For example, this creates a simple detail view, then presents it from ContentView
when a button is tapped:
struct SheetView: View {
@Environment(\.dismiss) var dismiss
var body: some View {
Button("Press to dismiss") {
dismiss()
}
.font(.title)
.padding()
.background(.black)
}
}
struct ContentView: View {
@State private var showingSheet = false
var body: some View {
Button("Show Sheet") {
showingSheet.toggle()
}
.sheet(isPresented: $showingSheet) {
SheetView()
}
}
}
Download this as an Xcode project
Important: If you’re targeting iOS 14 or below, you should use @Environment(\.presentationMode) var presentationMode
and `presentationMode.wrappedValue.dismiss() instead.
Unlike navigation links, sheets don’t require a navigation stack to work.
Tip: If you don’t want your sheet to be dismissible by dragging downwards on iOS, use the fullScreenCover()
modifier instead.
SPONSORED From March 20th to 26th, you can join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.