안녕하세요!
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
반응형
'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 |