İOS 13'te düğme ok tonunu geri ayarlamanın doğru yolu nedir?


11

IOS 13'te Apple, gezinme çubuğu görünümünü ayarlamak için yeni UINavigationBarAppearance proxy nesnesini tanıttı. Küçük bir şey dışında ihtiyacım olan neredeyse her şeyi ayarlayabildim. Geri düğmesinin oku her zaman mavi renk tonuyla oluşturulur ve nasıl istediğim renge ayarlayacağımı bilmiyorum. Eski [[UINavigationBar appearance] setTintColor:]yolu kullanıyorum , ancak UINavigationBarAppearance nesneleri API ile bunu yapmak için bir yol olması gerektiğini düşünüyorum. Nasıl bir fikri olan var mı?

Yanıtlar:


1

Görünümün geri düğmesi rengini (proxy) ayarlamanın yeni yolu şöyle olacaktır:

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

Benim app, değiştirir özel bir gezinti kontrol kurulum navigationBarler titleTextAttributes, tintColorve diğerleri farklı senaryolar bağlı.

Uygulamayı iOS 13'te çalıştırırken backBarButtonItemokun varsayılan mavi renk tonu vardı. Görünüm hata ayıklayıcı, sadece UIBarButtonItems UIImageViewbu mavi renk tonu olduğunu gösterdi .

Yaptığım şey navigationBar.tintColorrengi değiştirmek için iki kez ayarlamaktı ...

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)

    }


Çözüm ararken en garip kısım tutarsız sonuçtu, bu da beni yaşam döngüsü ve / veya görünüm animasyonları veya Xcode önbelleği ile ilgili olduğunu düşündürüyor :)


2
İOS 13'ü desteklemek için yapmamız gereken tüm kesmek düzeltmelerine inanamıyorum: / Düzeltme btw için teşekkürler!
Sreejith

Tuhaf, onu ayarlamak zorunda değilim, .noneya nilda görünüşü ayarladıktan sonra sadece bir renk veriyorum ve işe yarıyor
Mark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.