본문 바로가기
Swfit

NavigationBar 색상 및 타이틀 색상 변경하기

by GGShin 2022. 11. 12.

안녕하세요!

Navigation Controller에서 NavigationBar의 색상과 타이틀 색상을 아래처럼 변경하는 방법을 알아보겠습니다 :)

 

강의를 듣다가 NavigationBar의 색상과 타이틀 색상을 위와 같은 형태로 설정할 일이 있었는데요, 

그대로 따라 해봐도 저렇게 예쁘게 나오지 않고, 아래 사진처럼 navigation bar 부분만 띠 처럼 변경되더라구요. 

아일랜드가 있는 부분까지 색상이 다 채워졌으면 하는데, 아래 영역까지만 나오는 것을 보니 아이폰 시리즈별로 윗 부분이 형태가 달라서 그런 것 같다는 생각이 들었습니다. 

검색을 해보고 navigation bar의 appearance를 설정하는 방법을 새로이 알게되었습니다. 

바로 UINavigationBarAppearance() 를 사용하는 방법입니다.

 

처음에 bar 부분만 띠 처럼 나온 경우는 코드를 아래처럼 사용했습니다.

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        
        //이 부분 입니다.
        navigationController?.navigationBar.backgroundColor = UIColor(displayP3Red: 100/255, green: 54/255, blue: 64/255, alpha: 1.0)
        navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

        
    }

 

하지만 UINavigationbarAppearance()를 사용하면 아래처럼 작성할 수 있습니다.

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


		//UINavigationBarAppearance() 객체를 만든 뒤 설정을 해줍니다.
        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
        appearance.backgroundColor = UIColor(displayP3Red: 100/255, green: 54/255, blue: 64/255, alpha: 1.0)
        appearance.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
        appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
        
        //그런 다음 UINavigationBar의 standardAppearance에 위에서 설정한 appearance를 할당해줍니다.
        UINavigationBar.appearance().standardAppearance = appearance
        //그리고 UINavigationBar의 scrollEdgeAppearance에 위에서 
        //설정한 UINavigationBar.appearance().standardAppearance를 할당해줍니다.
        UINavigationBar.appearance().scrollEdgeAppearance = UINavigationBar.appearance().standardAppearance
     
        
        return true
    }

 

그리고 UINavigationbarAppearance를 사용할 때는 AppDelegate에서 설정해주었습니다. AppDelegate에서 설정할 때의 이점이 어떤 것이 있는지는 좀 더 알아봐야 할 것 같습니다 :')

 

 


참고자료

 

https://developer.apple.com/forums/thread/682420

 

barTintColor not working in iOS 15 | Apple Developer Forums

In iOS 15, UIKit has extended the usage of the scrollEdgeAppearance, which by default produces a transparent background, to all navigation bars. The background is controlled by when your scroll view scrolls content behind the navigation bar. Your screensho

developer.apple.com

 

반응형

'Swfit' 카테고리의 다른 글

날짜 사이 일수 구하기  (0) 2022.12.02
Substring 표현방법  (0) 2022.12.02
URLComponents  (0) 2022.11.11
Cannot find AF in scope - Alamofire 관련 에러  (0) 2022.11.10
Protocol extension  (0) 2022.11.02