技術ブログ

プログラミング、IT関連の記事中心

SwiftでUINavigationBarの色が設定されなくなった場合、下線を非表示にしたい場合(iOS15以上)

目次

今までの記述

UINavigationControllerの背景色、文字色、下線非表示の今までのソースコードは以下です。

public class func setNavigationController(vc: UIViewController) -> UINavigationController {
    let nav = UINavigationController(rootViewController: vc)
    // ナビゲーションバーの背景色
    nav.navigationBar.barTintColor = UIColor.red
    // ナビゲーションバーのアイテムの色 (戻る < とか 読み込みゲージとか)
    nav.navigationBar.tintColor = UIColor.white
    // ナビゲーションバーのテキストを変更する
    nav.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
    // ナビゲーションバーの透過禁止
    nav.navigationBar.isTranslucent = false
    nav.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    // 下線非表示
    nav.navigationBar.shadowImage = UIImage()

    return nav
}


スポンサードリンク



iOS15以降の背景色設定

iOS15以上で、背景色を設定する場合には、以下の定義を追加する必要があります。

let appearance = UINavigationBarAppearance()
// 背景色
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.backgroundColor = UIColor.red
    
// ナビゲーションバーに反映
nav.navigationBar.standardAppearance = appearance
nav.navigationBar.scrollEdgeAppearance = appearance

上記の記述を含めたソースは以下です。

public class func setNavigationController(vc: UIViewController) -> UINavigationController {
    let nav = UINavigationController(rootViewController: vc)
    // ナビゲーションバーの背景色
    nav.navigationBar.barTintColor = UIColor.red
    // ナビゲーションバーのアイテムの色 (戻る < とか 読み込みゲージとか)
    nav.navigationBar.tintColor = UIColor.white
    // ナビゲーションバーのテキストを変更する
    nav.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
    // ナビゲーションバーの透過禁止
    nav.navigationBar.isTranslucent = false
    nav.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    // 下線非表示
    nav.navigationBar.shadowImage = UIImage()

    if #available(iOS 15.0, *) {
        let appearance = UINavigationBarAppearance()
        // 背景色
        appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
        appearance.backgroundColor = UIColor.red
    
        // ナビゲーションバーに反映
        nav.navigationBar.standardAppearance = appearance
        nav.navigationBar.scrollEdgeAppearance = appearance
    }

    return nav
}


スポンサードリンク



iOS15以降の下線非表示

iOS15以上で、下線を非表示に設定する場合には、以下の定義を追加する必要があります。

let appearance = UINavigationBarAppearance()
// 下線非表示
appearance.shadowImage = UIImage()
appearance.shadowColor = .clear

// ナビゲーションバーに反映
nav.navigationBar.standardAppearance = appearance
nav.navigationBar.scrollEdgeAppearance = appearance

上記の記述を含めたソースは以下です。

public class func setNavigationController(vc: UIViewController) -> UINavigationController {
    let nav = UINavigationController(rootViewController: vc)
    // ナビゲーションバーの背景色
    nav.navigationBar.barTintColor = UIColor.red
    // ナビゲーションバーのアイテムの色 (戻る < とか 読み込みゲージとか)
    nav.navigationBar.tintColor = UIColor.white
    // ナビゲーションバーのテキストを変更する
    nav.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
    // ナビゲーションバーの透過禁止
    nav.navigationBar.isTranslucent = false
    nav.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    // 下線非表示
    nav.navigationBar.shadowImage = UIImage()

    if #available(iOS 15.0, *) {
        let appearance = UINavigationBarAppearance()
        // 下線非表示
        appearance.shadowImage = UIImage()
        appearance.shadowColor = .clear
    
        // ナビゲーションバーに反映
        nav.navigationBar.standardAppearance = appearance
        nav.navigationBar.scrollEdgeAppearance = appearance
    }

    return nav
}


スポンサードリンク



iOS15以降のソースコードまとめ

iOS15以上で、背景色の設定と、下線の非表示を設定する場合には、以下の定義を追加する必要があります。

let appearance = UINavigationBarAppearance()
// 下線非表示
appearance.shadowImage = UIImage()
appearance.shadowColor = .clear

// 背景色
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.backgroundColor = UIColor.red

// ナビゲーションバーに反映
nav.navigationBar.standardAppearance = appearance
nav.navigationBar.scrollEdgeAppearance = appearance

上記の記述を含めたソースは以下です。

public class func setNavigationController(vc: UIViewController) -> UINavigationController {
    let nav = UINavigationController(rootViewController: vc)
    // ナビゲーションバーの背景色
    nav.navigationBar.barTintColor = UIColor.red
    // ナビゲーションバーのアイテムの色 (戻る < とか 読み込みゲージとか)
    nav.navigationBar.tintColor = UIColor.white
    // ナビゲーションバーのテキストを変更する
    nav.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
    // ナビゲーションバーの透過禁止
    nav.navigationBar.isTranslucent = false
    nav.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    // 下線非表示
    nav.navigationBar.shadowImage = UIImage()
    
    if #available(iOS 15.0, *) {
        let appearance = UINavigationBarAppearance()
        // 下線非表示
        appearance.shadowImage = UIImage()
        appearance.shadowColor = .clear

        // 背景色
        appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
        appearance.backgroundColor = UIColor.red
        
        // ナビゲーションバーに反映
        nav.navigationBar.standardAppearance = appearance
        nav.navigationBar.scrollEdgeAppearance = appearance
    }
    return nav
}