Apple/SwiftUI

[SwiftUI/화면이동] navigationDestination 바르게 사용하기

wiwi-si 2024. 1. 2. 05:00
728x90

#문제

 NavigationLink(destination: , isActive: )이 iOS16+ deprecated되어서 더 이상 사용할 수 없었습니다. 그래서 다른 메서드인 navigationDestination 사용하였는데, 화면이 전환되지 않았습니다.

 NavigationLink(destination: , isActive: ) // deprecated!

 

#오류

처음에 코드를 짰을 때 navigationDestination이 작동하지 않아서 다음 화면으로 넘어가지 않았습니다.

struct OpeningView: View {
    
@State private var moveToScoreBoard = false
@State private var moveToLoadRecentGame = false
    
    var body: some View {

NavigationView {
VStack {
                Button("새 경기 시작하기") {
                    moveToScoreBoard = true
                }.foregroundStyle(.blue)
                    .buttonStyle(.bordered)
            }
            
            .navigationDestination(isPresented: $moveToScoreBoard, destination: {
                ScoreBoard()
            })
   }
  }
 }

 

# 오류 문구

NavigationLink presenting a value must appear inside a NavigationStack, NavigationSplitView, or List with selection. Link will be disabled.

( NavigationLink presenting a value는 NavigationStack, NavigationSplitView, or List with selection 안에 있어야 사용이 가능하다)

 

# 해결

NavigationView 제거 후 -> NavigationStack 추가

.navigationDestination이 정상적으로 작동하였습니다.

오류 문구와 공식 문서에 정답이 나와있습니다!

   NavigationStack {
            
            VStack {
                Button("새 경기 시작하기") {
                    moveToScoreBoard = true
                }.foregroundStyle(.blue)
                    .buttonStyle(.bordered)
            }
            
            .navigationDestination(isPresented: $moveToScoreBoard, destination: {
                ScoreBoard()
            })

'Apple > SwiftUI' 카테고리의 다른 글

[SwiftUI 특징] 선언적 구문, 데이터 주도적이다.  (0) 2023.10.27