스토리보드의 NavigationController UI Class에 INavigationViewController 입력하면 자동으로 변경됨.

import UIKit

class INavigationViewController: UINavigationController {
    /*
     ViewController 에서 재정의 할 경우 UINavigationController에 childForStatusBarStyle 및 preferredStatusBarStyle 재정의 해야 호출됨.
     [UIViewController 에서 재정의 호출]
     var barStyle = UIStatusBarStyle.lightContent
     override var preferredStatusBarStyle: UIStatusBarStyle{
         return barStyle
     
     */
    override open var childForStatusBarStyle: UIViewController? {
        return topViewController
    }
    
    open override var preferredStatusBarStyle: UIStatusBarStyle {
        return visibleViewController?.preferredStatusBarStyle ?? .default
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if #available(iOS 13.0, *) {
            let appearance = UINavigationBarAppearance()
            appearance.configureWithOpaqueBackground()
            appearance.backgroundColor = UIColor(red: 84.0 / 255.0, green: 199.0 / 255.0, blue: 217.0 / 255.0, alpha: 1.0)
            appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
            
            navigationBar.tintColor = UIColor.white
            navigationBar.standardAppearance = appearance
            navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance
        } else {
            // Fallback on earlier versions
            navigationBar.tintColor = UIColor.white
            navigationBar.barTintColor =  UIColor(red: 84.0 / 255.0, green: 199.0 / 255.0, blue: 217.0 / 255.0, alpha: 1.0)
            navigationBar.backgroundColor = UIColor(red: 84.0 / 255.0, green: 199.0 / 255.0, blue: 217.0 / 255.0, alpha: 1.0)
            //isTranslucent를 false로 설정하지 않는다면 기본값은 반투명
            navigationController?.navigationBar.isTranslucent = false
        }
    }
}

+ Recent posts