iOS gezinme çubuğu başlık yazı tipini ve rengini değiştir


102

Gezinti çubuğu başlık yazı tipini değiştirmesi gereken bu koda sahibim, ancak

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
                                                                       fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
                            [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

Geri düğmesi yazı tipini bu kodla değiştirmek gayet iyi çalışıyor.

   //set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
                                  nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
                                            forState:UIControlStateNormal];

Yanıtlar:


252

Başlık yazı tipini (ve rengini) değiştirmenin doğru yolu şudur:

[self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];

Düzenleme: Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
 NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Düzenleme: Swift 4

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedStringKey.foregroundColor: UIColor.red,
 NSAttributedStringKey.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Swift 3:

self.navigationController?.navigationBar.titleTextAttributes = 
[NSForegroundColorAttributeName: UIColor.redColor(),
 NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]

3
Denediğim değer ne olursa olsun boyut aynı kalıyor
Raphael Royer-Rivard

1
Evet, yazı tipimin düzgün yüklenmediğini fark ettim. Hala nedenini anlayamıyorum, OpenSans-Light ve OpenSans-Regular'ı aynı şekilde içe aktardım, yalnızca OpenSans-Light kullanılabilir görünüyor ...
Raphael Royer-Rivard

1
Obj-C kodunda bir kapatma ayracı eksik. Şöyle olmalıdır: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-normal" boyut: 21]}];
Dylan El

backBarButton yazı tipini değiştirmek için bağlantıya gidin: stackoverflow.com/a/16538596/5967144
soorej babu

Bir LargeTitle NavBar kullanırken ne olacak? navigationBar.LargeTitleTextAttributesBu saygıya uygun hiçbir şey bulamıyorum . LargeTitle yazı tipini genel olarak nasıl ayarlayacağınızı biliyor musunuz?
iKK

54

Diğer cevaplarda yanlış bir şey yok. Yazı tipini ayarlamak için film şeridi sürümünü paylaşıyorum.

1. Gezinme Denetleyicinizdeki Gezinme Çubuğunuzu Seçin

navbar

2. Nitelikler Denetçisinde Başlık Yazı Tipini Değiştirin

başlık-yazı tipi

(Xcode yeni yazı tipini almadan önce büyük olasılıkla Gezinme Çubuğu için Çubuk Renk Tonu'nu değiştirmeniz gerekecektir)

Notlar (Uyarılar)

Bunun Xcode 7.1.1+ üzerinde çalıştığı doğrulandı. ( Aşağıdaki Örneklere bakın )

  1. Yazı tipi etkili olmadan önce gezinme çubuğu renk tonunu değiştirmeniz gerekir (Xcode'da bir hata gibi görünür; varsayılana geri döndürebilirsiniz ve yazı tipi yapışacaktır)
  2. Bir sistem yazı tipi seçerseniz ~ Boyutun 0,0 olmadığından emin olun (Aksi takdirde yeni yazı tipi yok sayılır)

boyut

  1. Görünüşe göre bu, görünüm hiyerarşisinde yalnızca bir NavBar varken sorunsuz çalışıyor. Görünüşe göre aynı yığındaki ikincil NavBar'lar yok sayılıyor. (Ana gezinme denetleyicisinin navBar'ını gösterirseniz diğer tüm özel navBar ayarlarının yok sayılacağını unutmayın).

Gotchas (deux)

Bunlardan bazıları tekrar ediliyor, bu da büyük olasılıkla kayda değer oldukları anlamına geliyor.

  1. Bazen film şeridi xml'si bozulur. Bu, yapıyı Kaynak Kod modu olarak Storyboard'da incelemenizi gerektirir (film şeridi dosyasını sağ tıklayın> Farklı Aç ...)
  2. Bazı durumlarda, kullanıcı tanımlı çalışma zamanı özniteliğiyle ilişkili navigationItem etiketi, görünüm denetleyicisi etiketi yerine görünüm etiketinin bir xml alt öğesi olarak ayarlandı. Eğer öyleyse, düzgün çalışması için etiketlerin arasından çıkarın.
  3. Özel yazı tipinin kullanıldığından emin olmak için NavBar Tint'i değiştirin.
  4. Dinamik bir yazı tipi stili kullanmıyorsanız yazı tipinin boyut parametresini doğrulayın
  5. Görünüm hiyerarşisi, ayarları geçersiz kılacaktır. Yığın başına bir yazı tipinin mümkün olduğu görülmektedir.

Sonuç

navbar-italik

Örnekler

Özel Yazı Tiplerini Kullanma

Not ~ Code With Chris web sitesinde güzel bir kontrol listesi bulunabilir ve örnek indirme projesini görebilirsiniz.

Kendi yazı tipiniz varsa ve bunu film şeridinizde kullanmak istiyorsanız, aşağıdaki SO Sorusu'nda iyi bir cevap seti vardır . Bir cevap bu adımları tanımlar.

  1. Size özel yazı tipi dosyası (.ttf, .ttc) alın
  2. Yazı tipi dosyalarını Xcode projenize aktarın
  3. App-info.plist içinde, uygulama tarafından sağlanan Fonts adlı bir anahtar ekleyin. Bu bir dizi türüdür, tüm font dosya adlarınızı diziye ekleyin, not: dosya uzantısı dahil.
  4. Film şeridinde, Gezinti Çubuğu'nda Öznitelik Denetçisi'ne gidin, Yazı Tipi seçme alanının sağ simge düğmesini tıklayın. Açılır panelde, Yazı Tipini Özel Olarak Seçin ve gömdüğünüz Aileye ait yazı tipi adını seçin.

Özel Yazı Tipi Geçici Çözümü

Dolayısıyla Xcode doğal olarak UINavigationItem üzerinde özel yazı tiplerini işleyebilecek gibi görünür, ancak bu özellik düzgün şekilde güncellenmiyor (Seçilen yazı tipi yok sayılır).

UINavigationItem

Bunu çözmek için:

Bunun bir yolu, film şeridini kullanarak düzeltmek ve bir kod satırı eklemektir: Önce, Görünüm Denetleyicisine bir UIView (UIButton, UILabel veya başka bir UIView alt sınıfı) ekleyin (Gezinme Öğesi Değil ... Xcode şu anda birinin yapmasına izin vermiyor bu). Kontrolü ekledikten sonra, film şeridindeki yazı tipini değiştirebilir ve Görünüm Denetleyicinize çıkış olarak bir referans ekleyebilirsiniz. Sadece bu görünümü UINavigationItem.titleView'a atayın. Gerekirse metin adını kodda da ayarlayabilirsiniz. Bildirilen Hata (23600285).

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView

21

Bunu dene:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;

14

Gezinme Çubuğu başlığını değiştirmek için Swift kodum:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes

Ve arka plan yazı tipini de değiştirmek istiyorsanız, o zaman bunu AppDelegate'imde bulabilirsiniz:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)

8

Bu tek satırlı kodu Uygulama Temsilcinize EKLEYİN - Lauch Bitti mi. Yazı tipini, uygulama boyunca gezinme çubuğunun rengini değiştirecektir.

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]

5

İşte sorunuzun cevabı:

Görünüm yüklendikten sonra gezinme çubuğu başlığı güncellendiğinden kodunuzu aşağıdaki yönteme taşıyın. ViewDidLoad'a yukarıdaki kodu eklemeyi denedim çalışmıyor, viewDidAppear metodunda gayet iyi çalışıyor.

  -(void)viewDidAppear:(BOOL)animated{}

3

Herkesin bir Swift 3 sürümüne ihtiyacı vardır. redColor()sadece olarak değişti red.

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]

2

Değişmez değerler kullanılarak biraz daha okunabilir:

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };

2

Bir sorun yaşadım çünkü NavigationItem başlığımı programlı olarak değiştirmeye çalıştığımda aile yazı tipimi bulamadım (birçok şeyi denedim, ancak doğru çalışmasını sağlamak imkansız) bu yüzden storyboard'da çok güzel ve kolay bir geçici çözüm buldum.

  1. Öncelikle Gezinme Öğesi altına ortada bir görünüm eklersiniz ve aynı navBar rengine sahip olmak için backGroundColor'ı rengi temizlemek için ayarlamayı unutmayın:

görüntü açıklamasını buraya girin

  1. Daha sonra bu görünümde düzenleyebileceğiniz (metnin rengini, yazı tipini, boyutunu ...) bir Etiket eklersiniz.
  2. Etiketin metnini görüntülemek ve ortalamak için etikete (Üst = 0, Alt = 0, Son = 0 ve Başa Dön = 0) sınırlamalar eklersiniz

Son olarak, belge taslağında böyle bir şeye sahip olmalısınız:

görüntü açıklamasını buraya girin

Ve ViewController'ınızda bunun gibi bir şey:

görüntü açıklamasını buraya girin

Umarım yardımcı olabilir.


2

Swift: -

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]

1

Bu, Swift 4'e bir alternatif için (zaten @ Josh tarafından cevaplanmıştır):

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed

1

iOS 11

görüntü açıklamasını buraya girin

Amaç-C

if (@available(iOS 11.0, *)) {
    self.navigationController.navigationItem.largeTitleDisplayMode =  UINavigationItemLargeTitleDisplayModeAlways;
    self.navigationController.navigationBar.prefersLargeTitles = true;

// Change Color
    self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

} else {
    // Fallback on earlier versions
}

1

Objective-C'nin Yazı Tipi ve Rengi ayarlaması için

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}

0

İşte Swift 4 için bir cevap 😁:

    let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

0

Derleme hatalarını önlemek için anahtarların Ham değerlerini eklemeyi unutmayın.

    let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

0

Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]

0

Bu uzantıyı ekleyin

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

ViewDidLoad () 'a aşağıdaki satırı ekleyin

self.navigationController?.navigationBar.changeFont()

-1

Swift 3.0'da çalışma Başlık rengini değiştirmek için bunun gibi titleTextAttributes eklemeniz gerekir

        let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
        self.navigationController.navigationBar.titleTextAttributes = textAttributes

For changing navigationBar background color you can use this
        self.navigationController.navigationBar.barTintColor = UIColor.white

For changing navigationBar back title and back arrow color you can use this
       self.navigationController.navigationBar.tintColor = UIColor.white
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.