PLUB 개발회고 (5)

이건준·2023년 4월 8일
0
post-thumbnail

1. UINavigationBarAppearance

  • 이번 프로젝트를 진행함에 있어서 커스텀 네비게이션바가 아니라 애플에서 제공하는 기본 네비게이션바를 이용하기로 하였다

  • 위와 같은 과정에 있어서 모든 화면에 네비게이션바의 세팅을 위한 공통코드가 추가되었고 우리는 이를 해결하기위한 방법으로 UINavigationBarAppearance라는 것을 알게되었다

let appearance = UINavigationBarAppearance()
    
    appearance.configureWithOpaqueBackground() // 반투명 색상
    appearance.backgroundColor = .background // 배경색
    
    appearance.titleTextAttributes = [
      NSAttributedString.Key.foregroundColor: UIColor.black, // 텍스트 색상
      NSAttributedString.Key.font: UIFont.h4 // 폰트
    ]
    
    UINavigationBar.appearance().tintColor = .black
    UINavigationBar.appearance().standardAppearance = appearance
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
  • 위 코드를 앱 내에 추가하면서 매 화면마다 네비게이션바를 세팅할 코드를 줄일 수 있었다

  • 또한 UINavigationBarAppearance를 알게되면서 알게된 사실이 있는데 위 이미지처럼 항상 네비게이션바를 구분짓는 선이 있었고 기존 디자인과는 다른 라인이였고 기본 네비게이션바를 쓰면 어쩔 수 없는 부분이라 생각하였다
// 내비바 하단 회색선 제거
    appearance.shadowColor = .clear
    appearance.shadowImage = UIImage()
  • 하지만 위 코드를 UINavigationBarAppearance에 추가해줌으로써 하단 회색선을 제거해줄 수 있었다

2. Apple SwipeGesture

  • 기존에 알고있지않은 정보였는데 애플앱에서는 기본적으로 백 제스처를 통해서 화면이 pop되는 동작이 존재한다

  • 아마 애플 핸드폰을 사용하는 사용자에게 있어서 이 제스처는 당연한 동작일 수 있지만 실제 앱을 개발하다보면 이 제스처는 기본적으로 제공받지못한다

navigationController?.interactivePopGestureRecognizer?.delegate = self

extension BaseNavigationController: UIGestureRecognizerDelegate {
  func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    viewControllers.count > 1
  }
}
  • navigationController에 위 같은 코드를 추가해주면된다, 실제로 해당 코드를 작성한 컨트롤러에서 백 제스처를 감지하면 delegate 메소드가 실행되게 된다

특징

  • 해당 delegate를 추가하면 추가한 컨트롤러가 포함되어있는 네비게이션컨트롤러에 푸시된 모든 컨트롤러에서 해당 백 제스처가 동작하게된다

0개의 댓글