はじめに
SwiftUIで公式に提供されている画面遷移方法は3つあります。
① NavigationLink
② sheet
③ fullScreenCover
今回は上記の3つ + カスタム遷移を1つ紹介しようと思います。
NavigationLink
ContentView.swift
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink("NavigationLink") {
SubView()
}
}
}
}
SubView.swift
import SwiftUI
struct SubView: View {
@Environment(\.dismiss) var dismiss
var body: some View {
ZStack {
Color.yellow.edgesIgnoringSafeArea(.all)
Button("閉じる") {
dismiss()
}
}
}
}
Sheet
ContentView.swift
import SwiftUI
struct ContentView: View {
@State var ShowSheet: Bool = false
var body: some View {
Button("Sheet") {
ShowSheet.toggle()
}
.sheet(isPresented: $ShowSheet) {
SubView()
}
}
}
SubView.swift
import SwiftUI
struct SubView: View {
@Environment(\.dismiss) var dismiss
var body: some View {
ZStack {
Color.yellow.edgesIgnoringSafeArea(.all)
Button("閉じる") {
dismiss()
}
}
}
}
fullScreenCover
ContentView.swift
import SwiftUI
struct ContentView: View {
@State var ShowFullScreenCover: Bool = false
var body: some View {
Button("fullScreenCover") {
ShowFullScreenCover.toggle()
}
.fullScreenCover(isPresented: $ShowFullScreenCover) {
SubView()
}
}
}
SubView.swift
import SwiftUI
struct SubView: View {
@Environment(\.dismiss) var dismiss
var body: some View {
ZStack {
Color.yellow.edgesIgnoringSafeArea(.all)
Button("閉じる") {
dismiss()
}
}
}
}
overlay
ContentView.swift
import SwiftUI
struct ContentView: View {
@State var ShowViewOverlay: Bool = false
var body: some View {
NavigationView {
Button("Overlay") {
withAnimation {
ShowViewOverlay.toggle()
}
}
}
.overlay(
SubView(ShowViewOverlay: $ShowViewOverlay)
)
}
}
SubView.swift
import SwiftUI
struct SubView: View {
@Binding var ShowViewOverlay: Bool
var body: some View {
if ShowViewOverlay {
ZStack {
Color.yellow.edgesIgnoringSafeArea(.all)
Button("閉じる") {
withAnimation {
ShowViewOverlay.toggle()
}
}
}
}
}
}