Apa cara yang tepat untuk mengatur warna tombol panah kembali pada ios 13

11

Di ios 13, Apple memperkenalkan objek proxy UINavigationBarAppearance yang baru untuk mengatur tampilan bilah navigasi. Saya sudah bisa mengatur hampir semua yang saya butuhkan kecuali satu hal kecil. Panah tombol kembali selalu dirender dengan warna warna biru dan saya tidak tahu cara mengaturnya ke warna yang saya inginkan. Saya menggunakan [[UINavigationBar appearance] setTintColor:]cara lama , tapi saya pikir harus ada beberapa cara untuk melakukannya dengan objek UINavigationBarAppearance API. Adakah yang tahu bagaimana?

Roma
sumber

Jawaban:

1

Cara baru mengatur warna tombol kembali tampilan (proxy) adalah:

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
Justin Ganzer
sumber
5

Saya memiliki pengaturan pengontrol navigasi khusus di aplikasi saya, yang memodifikasi navigationBars titleTextAttributes, tintColordan lainnya tergantung pada skenario yang berbeda.

Menjalankan aplikasi di iOS 13 backBarButtonItempanah memiliki warna warna biru standar. Tampilan debugger menunjukkan bahwa hanya huruf UIBarButtonItems yang UIImageViewmemiliki warna biru ini.

Apa yang akhirnya saya lakukan adalah mengatur navigationBar.tintColordua kali agar warna berubah ...

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)

    }


Bagian yang paling aneh ketika mencari solusi adalah hasil yang tidak konsisten, yang membuat saya berpikir terkait dengan siklus hidup dan / atau tampilan animasi atau cache Xcode :)

Artur
sumber
2
Tidak dapat percaya semua perbaikan peretasan yang perlu kita lakukan untuk mendukung iOS 13: / Terima kasih atas perbaikannya btw!
Sreejith
Aneh, saya tidak harus mengaturnya ke .noneatau nil, saya hanya memberi warna setelah mengatur penampilan dan itu hanya berfungsi
Mark