화면을 모달로 표시한다.
화면 전체를 채우지 않음
struct Sheet: View {
@State private var presentCardModal = false
var body: some View {
}
}
struct Sheet: View {
@State private var presentCardModal = false
var body: some View {
Button {
} label: {
}
.sheet(isPresented: $presentCardModal) {
//onDismiss
//시트 닫은 다음 호출됨
} content: {
//표시할 뷰 리턴
}
}
}
보통 버튼일 경우 버튼 누를 시로 작업
struct Sheet: View {
@State private var presentCardModal = false
var body: some View {
Button {
presentCardModal = true
} label: {
}
.sheet(isPresented: $presentCardModal) {
//onDismiss
//시트 닫은 다음 호출됨
} content: {
//표시할 뷰 리턴
}
}
}
화면 전체를 채움
struct Sheet: View {
@State private var presentFullScreen = false
var body: some View {
Button {
} label: {
}
.fullScreenCover(isPresented: $presentFullscreen) {
//onDismiss
} content: {
//표시할 뷰 리턴
}
}
}
cardModal과 달리 화면을 닫는 코드가 없으므로 직접 추가해야 한다.
@Environment(\.presentationMode) var presentationMode
//iOS15 이상
@Environment(\.dismiss) var dismiss
var body: some View {
...
.overlay(alignment: .top) {
Button {
presentationMode.wrappedValue.dismiss()
//iOS15
presentationMode.dismiss()
} label: {
...
}
}
}
isPresented에 사용했던 State var을 모달뷰에 전달하여 false로 바꿈을 통해 뷰를 dismiss하는 방식
@Binding var presentModal: Bool
#Preview {
ImageScene(presentModal: .constant(true))
}
var body: some View {
...
.overlay(alignment: .top) {
Button {
presentModal = false
} label: {
...
}
}
}
struct Sheet: View {
@State private var presentFullScreen = false
var body: some View {
Button {
} label: {
}
.fullScreenCover(isPresented: $presentFullscreen) {
//onDismiss
} content: {
ImageScene(presentModal: $presentFullScreen)
}
}
}
nil이 저장되면 표시 안하고 값이 저장되면 표시
트리거뷰에서는 해당 속성에 값을 저장해야 함.
//Identifiable 프로토콜 채용
@State private var imageData: ImageData?
var body: some View {
Button {
imageData = ImageData()
} label: {
}
.sheet(item: $imageData, onDismiss: {}) { data in
//뷰 리턴
}
}