SwiftUI 프로젝트를 개발할 때, NavigationView와 NavigationLink를 사용하여 화면 이동을 구현하곤 합니다.
문제는 화면이동 직후 다시 뒤로 돌아와버리는 버그가 발생하는 경우가 있다는 것입니다.
구글링도 해보고 이것저것 시도하면서 해결했던 방법들을 정리해보겠습니다.
1. 대부분의 경우 NavigationView에 .navigationViewStyle(.stack)을 설정해주면 해결됩니다.
NavigationView {
...
}.navigationViewStyle(.stack)
//.navigationViewStyle(StackNavigationViewStyle())
2. View에 NavigationLink가 하나만 있는 경우에도 종종 버그가 발생합니다. 이 때는 EmptyView로 이루어진 NavigationLink를 하나 더 만들어주면 됩니다.
struct ParentView: View {
var body: some View {
VStack {
NavigationLink {
ChildView()
} label: {
Text("move to ChildView")
}
NavigationLink {
EmptyView()
} label: {
EmptyView()
}.hidden()
...
}
}
}
3. NavigationLink로 화면을 이동하는 중에 다른 NavigationLink로 또 다른 이동을 시도하면 뒤로 돌아오는 버그가 있는데, 화면 이동에 걸리는 시간(약 0.2초로 추정)후에 이동하도록 하면 뒤로 돌아오지 않습니다.
4. 화면 이동 후 Parent View의 State에 변화가 생기면 돌아가는 버그가 있습니다. 원래는 Child View가 StateObject를 사용하지 않는다면 Child View의 State가 초기화되는 것은 맞습니다만, 뒤로 돌아가는 것은 문제가 있죠. 해결법을 찾지는 못했고, 대신 버그를 회피하도록 Child View의 onDisappear에서 Parent View의 State를 바꾸도록 구현하는 등의 방법을 사용하였습니다.
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] 프로그래머스 과제관 (K-MOOC 강좌정보 서비스) (0) | 2022.04.06 |
---|---|
[SwiftUI] "손쉬운 사용" 버튼 스타일 (0) | 2022.03.03 |
[SwiftUI] Naver Map에 Custom Marker 띄우기 (2) | 2022.02.16 |
[SwiftUI] Custom Navigation Bar의 Back Swipe 액션 활성화하기 (2) | 2022.02.15 |
[SwiftUI] Menu 관련 버그 (0) | 2022.02.14 |