Updated for Xcode 16.4
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.
SAVE 50% All our books and bundles are half price for Black Friday, so you can take your Swift knowledge further for less! Get my all-new book Everything but the Code to make more money with apps, get the Swift Power Pack to build your iOS career faster, get the Swift Platform Pack to builds apps for macOS, watchOS, and beyond, or get the Swift Plus Pack to learn Swift Testing, design patterns, and more.