iOS 13で戻るボタンの矢印の色合いを設定する正しい方法は何ですか


11

iOS 13では、Appleはナビゲーションバーの外観を設定するための新しいUINavigationBarAppearanceプロキシオブジェクトを導入しました。1つの小さなことを除いて、必要なほぼすべてを設定することができました。戻るボタンの矢印は常に青の色合いでレンダリングされ、希望する色に設定する方法がわかりません。私は古い[[UINavigationBar appearance] setTintColor:]方法を使用していますが、UINavigationBarAppearanceオブジェクトAPIでそれを行うにはいくつかの方法が必要だと思います。誰もがどのように考えていますか?

回答:


1

外観(プロキシ)の戻るボタンの色を設定する新しい方法は次のとおりです。

let appearance = UINavigationBarAppearance()

// Apply the configuration option of your choice
appearance.configureWithTransparentBackground()

// Create button appearance, with the custom color
let buttonAppearance = UIBarButtonItemAppearance(style: .plain)
buttonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]

// Apply button appearance
appearance.buttonAppearance = buttonAppearance

// Apply tint to the back arrow "chevron"
UINavigationBar.appearance().tintColor = UIColor.whiteI

// Apply proxy
UINavigationBar.appearance().standardAppearance = appearance

// Perhaps you'd want to set these as well depending on your design:
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance

5

私は私のアプリ、変更にカスタムナビゲーションコントローラを設定しているnavigationBartitleTextAttributestintColorその他は異なるシナリオに応じました。

iOS 13でアプリを実行すると、backBarButtonItem矢印のデフォルトの青の色合いが変わりました。ビューデバッガーは、UIBarButtonItems だけにUIImageViewこの青い色合いがあることを示しました。

私がやったことはnavigationBar.tintColor、それを2回設定して色を変更することでした...

public class MyNavigationController: UINavigationController, UINavigationControllerDelegate {

    public var preferredNavigationBarTintColor: UIColor?

    override public func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
    }


    public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {

        // if you want to change color, you have to set it twice
        viewController.navigationController?.navigationBar.tintColor = .none
        viewController.navigationController?.navigationBar.tintColor = preferredNavigationBarTintColor ?? .white

        // following line removes the text from back button
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

    }


解決策を探す際の最も奇妙な部分は一貫性のない結果でした。そのため、ビューライフサイクルや外観のアニメーション、またはXcodeキャッシュに関連していると思います:)


2
iOS 13をサポートするために必要なすべてのハック修正を信じられません:/修正ありがとうございます!
Sreejith、

奇妙なことに、私は.noneまたはに設定する必要はありません。nil外観を設定した後で色を付けるだけで機能します
Mark
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.