← Back to list

Custom NavigationItem BackbarButton — 네비게이션 백버튼 커스텀

feat: 스터디 모임 프로젝트(피플즈)

domb · 2023-04-24 05:09 · 0 claps · 3.4 min read
#navigation-bar #ios #swift #back-button #navigation-controller
Open on Medium ↗
Wiki topics: 📱 · Mobile Development

Custom NavigationItem BackbarButton — 네비게이션 백버튼 커스텀

스터디 모임 프로젝트(피플즈) 에서 디폴트 백버튼 아이템이 아닌 커스텀 버튼을 사용하고 이전화면의 타이틀명을 보여주지 않도록 구현해야했습니다.

설정과정에서 생긴 문제들과 해당 코드들에 대해서 알아보려고 합니다.

<수정전>

extension UINavigationController {
    var backButtonImage: UIImage? {
        UIImage(named: "back")?.withAlignmentRectInsets(UIEdgeInsets(top: 0.0, left: -12.0, bottom: 0.0, right: 0.0))
    }

    func setupBrandNavigation() {
            navigationBar.setBackgroundImage(UIImage(), for: .default)
            navigationBar.shadowImage = UIImage()
            navigationBar.topItem?.title = ""

            navigationBar.backIndicatorImage = backButtonImage
            navigationBar.backIndicatorTransitionMaskImage = backButtonImage
        }
    }
}
  • 기존 코드는 네비게이션 컨트롤러에서 해당 백버튼 이미지를 설정하기 위해서 필요한 VC마다 viewDidLoad() 에서 setupBrandNavigation() 호출 해주어야합니다.
  • 구글에 검색 또는 chat-GPT에 검색해보면 topItem의 title을 "" 로 설정해주는 코드들이 많이 나옵니다. 하지만 그렇게 할 경우 이전 VC로 다시 돌아거면 title이 ""로 설정되어 문제가 생기게됩니다.

<수정 후>

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        let backButtonImage = UIImage(named: "back")?.withAlignmentRectInsets(UIEdgeInsets(top: 0.0, left: -12.0, bottom: 0.0, right: 0.0))

        UINavigationBar.appearance().backIndicatorImage = backButtonImage
        UINavigationBar.appearance().backIndicatorTransitionMaskImage = backButtonImage
        UINavigationBar.appearance().navigationBar.setBackgroundImage(UIImage(), for: .default)
        UINavigationBar.appearance().navigationBar.shadowImage = UIImage()
    }
}  
extension UINavigationController {

    func setupBrandNavigation() {
        navigationBar.topItem?.backButtonDisplayMode = .minimal
    }
}

모두 다 appDelegate에서 설정해주고 싶었지만 topItem이 없어서 .backButtonDisplayMode의 설정이 불가능했습니다.

☝🏻 이 부분은 좀 더 고민해보기로 하고 이슈 해결 완료!


메타데이터
post_id
e549daa0b1ca
slug
custom-navigationitem-backbarbutton-네비게이션-백버튼-커스텀하기-e549daa0b1ca
url
https://medium.com/@woon4910/custom-navigationitem-backbarbutton-%EB%84%A4%EB%B9%84%EA%B2%8C%EC%9D%B4%EC%85%98-%EB%B0%B1%EB%B2%84%ED%8A%BC-%EC%BB%A4%EC%8A%A4%ED%85%80%ED%95%98%EA%B8%B0-e549daa0b1ca
canonical_url
https://medium.com/@woon4910/custom-navigationitem-backbarbutton-%EB%84%A4%EB%B9%84%EA%B2%8C%EC%9D%B4%EC%85%98-%EB%B0%B1%EB%B2%84%ED%8A%BC-%EC%BB%A4%EC%8A%A4%ED%85%80%ED%95%98%EA%B8%B0-e549daa0b1ca
author_url
https://medium.com/@woon4910
status
ok
fetched_at
2026-09-01 15:19:15