[SwiftUI] 아이패드에서 뒤로가기 버튼 혹은 닫기 버튼이 안보일때 (NavigationStack + NavigationLink)
이미지와 설명을 보면, iPad에서 NavigationStack
을 쓰고 있지만 “뒤로가기 버튼”이 안 보이는 문제가 발생하고 있다. NavigationStack
또는 NavigationSplitView
구조에서 자주 발생한다고 하네?
근데 글씨가 안보이지, 버튼은 존재하는 상태이다. 버튼이 있을만한 위치를 클릭하면 닫히기 때문이다.

✅ 원인
iPad의 NavigationStack
또는 NavigationView
는 다크 모드 또는 특정 커스텀 색상 조합일 때:
- 기본
NavigationBar
의 back button 색상 (tintColor
) 이 배경색과 같거나 유사할 경우, - 실제로 버튼이 있는 위치는 클릭되지만 사용자에게 보이지 않음.
🎯 해결 방법: 탐색 바의 tintColor 명시 설정
NavigationStack
또는 NavigationView
에 .tint(...)
수정자를 추가해서 버튼 색상을 명시하면 해결됩니다.
예시:
NavigationStack {
YourView()
.navigationTitle("PIN 변경")
.navigationBarTitleDisplayMode(.inline)
}
.tint(.white) // 혹은 .primary, .blue 등 잘 보이는 색
이렇게 하면 뒤로가기 버튼 아이콘 및 텍스트의 색상이 강제로 바뀝니다.
🎯 버튼이 존재하지 않는 다면? 문제 요약
- iPad에서
NavigationStack
을 사용 중. - 화면을
NavigationLink
로 푸시했지만, 뒤로가기 버튼이 보이지 않음. - 특히 탭바 UI와 중첩되었을 경우 iPad는 full-screen push가 안 되고 “side-by-side” 구조처럼 렌더링됨.
✅ 해결 방법
1. NavigationSplitView
를 쓰고 있는 경우라면?
DetailView
에navigationBarBackButtonHidden(true)
가 기본으로 적용됨.- 직접 dismiss 버튼을 만들어야 합니다.
@Environment(\.dismiss) var dismiss
Button(action: {
dismiss()
}) {
Label("뒤로가기", systemImage: "chevron.left")
}
2. NavigationStack
+ NavigationLink
사용하는 경우라면?
조건:
NavigationStack
안에서NavigationLink
로 화면을 push하고 있음- iPad에서는 이게 자동으로 full-screen push가 아니라 split 모드처럼 동작할 수 있음
해결책:
- iPad에서도 명시적으로 full-screen push되게 만들려면
.navigationSplitViewStyle(.balanced)
나.navigationBarBackButtonHidden(false)
를 명시하거나 - 화면 전환을
sheet
,fullScreenCover
,popover
로 변경하는 것도 고려해야 함
🎯 가장 안정적인 해결 방법: dismiss()
버튼 직접 추가
import SwiftUI
struct PinChangeView: View {
@Environment(\.dismiss) var dismiss
var body: some View {
VStack(alignment: .leading, spacing: 16) {
HStack {
Button {
dismiss()
} label: {
Image(systemName: "chevron.left")
.font(.title2)
.foregroundColor(.primary)
}
Text("설정")
.font(.headline)
}
Text("PIN 번호 변경")
.font(.largeTitle.bold())
// 나머지 PIN 입력 폼...
}
.padding()
}
}
✳️ 참고 팁
NavigationSplitView
나NavigationStack
을 iPad에서 쓸 때는 항상 명시적인 탐색 흐름 관리가 필요.- 기본 back 버튼을 기대하지 말고, 직접 dismiss 버튼 추가하는 걸 권장.