적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/SwiftUI

[SwiftUI] 투명 navigation bar 처리

hongssup_ 2024. 8. 12. 15:02
반응형

1. iOS 16+ 에서는 .toolbarBackground() 사용 가능

.toolbarBackground(.clear, for: .navigationBar)

 

2. iOS 15 이하에서는 UINavigationBarAppearance() 활용해 직접 설정 변경

var body: some View {
    NavigationView {
        VStack {
        }
        .onAppear {
            makeNavigationBarTransparent()
        }
        .onDisappear {
            restoreOriginalNavigationBar()
        }
    }
}

// 네비게이션 바를 투명하게 만드는 함수
private func makeNavigationBarTransparent() {
    let newAppearance = UINavigationBarAppearance()
    newAppearance.configureWithTransparentBackground()
    newAppearance.backgroundColor = UIColor.clear
    newAppearance.shadowColor = .clear
    newAppearance.backgroundImage = UIImage() // 완전 투명하게 설정

    if let navigationBar = UINavigationBar.appearance() as? UINavigationBar {
        originalAppearance = navigationBar.standardAppearance
        navigationBar.standardAppearance = newAppearance
        navigationBar.scrollEdgeAppearance = newAppearance
        navigationBar.compactAppearance = newAppearance
    }
}
    
// 원래 네비게이션 바 상태 복원
private func restoreOriginalNavigationBar() {
    if let originalAppearance = originalAppearance {
        UINavigationBar.appearance().standardAppearance = originalAppearance
        UINavigationBar.appearance().scrollEdgeAppearance = originalAppearance
        UINavigationBar.appearance().compactAppearance = originalAppearance
    }
}
728x90
반응형