위 사진은 A -> B 페이지로 이동한 모습입니다
A 화면이 Navigation 의 루트 화면입니다
기본적으로 Navigation Bar 가 존재해서 root 화면인 A 화면에는 상단에
빈것처럼 공간이 남게되고, B 화면에는 파란색 뒤로가기 버튼이 들어있는 Bar 가 표기되게 됩니다
정말 못생겼으니 바꿔주도록 합시다..
바꾸는 방법은
1. custom navigation bar 적용 -> 기존 navigation bar 에 버튼을 추가하는 방법
2. 아예 navigation bar 를 비활성화 시키기
두종류가 있는데 저는 두번째 방법으로 해보겠습니다
Navigation Bar 비활성화 하기
// AViewController
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 기본 네비게이션바 비활성화
navigationController?.setNavigationBarHidden(true, animated: false)
}
이렇게 루트 뷰에서 비활성화 처리를 해주면 루트뷰를 포함한 이후의 뷰들 (ex: B) 은 모두 navigation bar 가 비활성화 됩니다
하지만 이렇게 비활성화를 하면 화면의 가장자리 왼쪽에서 오른쪽으로 제스쳐를 취하면 이전페이지로 가지는 기능이 작동하지 않습니다
제스쳐 활성화
// BViewController
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 스와이프 뒤로 가기 제스처 다시 활성화
navigationController?.interactivePopGestureRecognizer?.delegate = self
navigationController?.interactivePopGestureRecognizer?.isEnabled = true
}
extension BViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return true // 스와이프 제스처 허용
}
}
제스쳐 기능은 키고 싶다면 위 코드를 추가해 주면 됩니다
루트 뷰 바로 다음 뷰(B Vc)에만 한번 작성해주면 됩니다
B 뷰에만 작성해준다면 이후의 C, D ... 뷰들 전부 제스쳐가 활성화 됩니다
'iOS | Swift' 카테고리의 다른 글
[iOS | Swift] Widget 에 CoreData 연동시 생겼던 오류 (error : Foundation._GenericObjCError) (0) | 2025.03.26 |
---|---|
[iOS | Swift] TestFlight 초대 메일이 안오는 현상 (Feat: Flutter TestFlight) (0) | 2025.01.21 |
[iOS | Swift] Apple store connect 에 빌드 다시 올리기 / TestFlight 업데이트하기 (0) | 2025.01.18 |
[iOS | Swift] 커스텀 Navigation Bar 뒤로가기 제스쳐가 안되는 현상 해결 (0) | 2025.01.05 |
[Xcode] framework 설치 후 프레임워크가 빨간글씨로 보이는 오류 (0) | 2024.12.13 |