iOS mengubah font dan warna judul bilah navigasi


101

Jadi saya punya kode ini yang harus mengubah font judul bilah navigasi, tetapi itu doenst

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

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

Mengubah font tombol kembali dengan kode ini berfungsi dengan baik.

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

Jawaban:


251

Cara yang benar untuk mengubah font judul (dan warna) adalah:

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

Edit: Swift 4.2.0

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

Edit: Cepat 4

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

Cepat 3:

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

2
Ukurannya tetap sama terlepas dari nilai yang saya coba
Raphael Royer-Rivard

1
Ya, saya menyadari font saya tidak dimuat dengan benar. Masih tidak tahu mengapa, saya telah mengimpor OpenSans-Light dan OpenSans-Regular dengan cara yang sama, hanya OpenSans-Light yang tampaknya dapat digunakan ...
Raphael Royer-Rivard

1
Kode Obj-C tidak memiliki kurung tutup. Seharusnya: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-regular" size: 21]}];
Dylan Hand

buka tautan untuk mengubah font backBarButton: stackoverflow.com/a/16538596/5967144
soorej babu

Bagaimana dengan saat menggunakan LargeTitle NavBar? Saya tidak menemukan apapun navigationBar.LargeTitleTextAttributesatau apapun untuk menghormati itu. Apakah Anda tahu cara menyetel font LargeTitle secara global?
iKK

54

Tidak ada yang salah dengan jawaban lainnya. Saya hanya membagikan versi storyboard untuk mengatur font.

1. Pilih Bilah Navigasi Anda dalam Pengontrol Navigasi Anda

navbar

2. Ubah Font Judul di Attributes Inspector

judul-font

(Anda mungkin perlu mengubah Warna Bar untuk Bar Navigasi sebelum Xcode mengambil font baru)

Catatan (Peringatan)

Diverifikasi bahwa ini berfungsi pada Xcode 7.1.1+. ( Lihat Sampel di bawah )

  1. Anda perlu mengganti warna bilah navigasi sebelum font diterapkan (sepertinya ada bug di Xcode; Anda dapat mengubahnya kembali ke default dan font akan tetap)
  2. Jika Anda memilih font sistem ~ Pastikan ukurannya bukan 0,0 (Jika tidak, font baru akan diabaikan)

ukuran

  1. Sepertinya ini berfungsi tanpa masalah saat hanya satu NavBar yang ada dalam hierarki tampilan. Tampaknya NavBars sekunder dalam tumpukan yang sama diabaikan. (Perhatikan bahwa jika Anda menampilkan navBar pengontrol navigasi master, semua pengaturan navBar kustom lainnya akan diabaikan).

Gotchas (deux)

Beberapa di antaranya diulang yang artinya sangat mungkin perlu diperhatikan.

  1. Terkadang storyboard xml rusak. Ini mengharuskan Anda untuk meninjau struktur di Storyboard sebagai mode Kode Sumber (klik kanan file storyboard> Buka Sebagai ...)
  2. Dalam beberapa kasus, tag navigationItem yang terkait dengan atribut runtime yang ditentukan pengguna disetel sebagai turunan xml dari tag tampilan, bukan tag pengontrol tampilan. Jika demikian, hapus dari antara tag untuk pengoperasian yang benar.
  3. Alihkan Warna NavBar untuk memastikan font kustom digunakan.
  4. Verifikasi parameter ukuran font kecuali menggunakan gaya font dinamis
  5. Tampilan hierarki akan menimpa pengaturan. Tampaknya satu font per tumpukan dimungkinkan.

Hasil

navbar-italic

Sampel

Menangani Font Kustom

Catatan ~ Daftar periksa yang bagus dapat ditemukan dari situs web Code With Chris dan Anda dapat melihat proyek unduhan sampel.

Jika Anda memiliki font Anda sendiri dan ingin menggunakannya di storyboard Anda, maka ada serangkaian jawaban yang layak untuk Pertanyaan SO berikut . Satu jawaban mengidentifikasi langkah-langkah ini.

  1. Dapatkan Anda file font khusus (.ttf, .ttc)
  2. Impor file font ke proyek Xcode Anda
  3. Di app-info.plist, tambahkan kunci bernama Font yang disediakan oleh aplikasi. Ini adalah tipe array, tambahkan semua nama file font Anda ke array, catatan: termasuk ekstensi file.
  4. Di storyboard, pada NavigationBar pergi ke Attribute Inspector, klik tombol ikon kanan dari area Font select. Di panel popup, pilih Font to Custom, dan pilih Family of you embeded font name.

Solusi Font Kustom

Jadi Xcode secara alami terlihat seperti dapat menangani font khusus pada UINavigationItem tetapi fitur itu tidak diperbarui dengan benar (Font yang dipilih diabaikan).

UINavigationItem

Untuk mengatasinya:

Salah satu caranya adalah memperbaiki penggunaan storyboard dan menambahkan sebaris kode: Pertama, tambahkan UIView (UIButton, UILabel, atau subkelas UIView lainnya) ke View Controller (Bukan Item Navigasi ... Xcode saat ini tidak mengizinkan seseorang untuk melakukannya bahwa). Setelah Anda menambahkan kontrol, Anda dapat memodifikasi font di storyboard dan menambahkan referensi sebagai outlet untuk Pengontrol Tampilan Anda. Cukup tetapkan tampilan itu ke UINavigationItem.titleView. Anda juga dapat mengatur nama teks dalam kode jika perlu. Bug yang Dilaporkan (23600285).

@IBOutlet var customFontTitleView: UIButton!

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

21

Coba ini:

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

14

Kode Swift saya untuk mengubah judul Bilah Navigasi:

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

Dan jika Anda juga ingin mengubah font latar belakang, saya memiliki ini di AppDelegate saya:

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

8

TAMBAHKAN kode baris tunggal ini di Delegasi Aplikasi Anda - Apakah Selesai Lauch. Ini akan mengubah Font, warna bilah navigasi di seluruh aplikasi.

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

5

Inilah jawaban untuk pertanyaan Anda:

Pindahkan kode Anda ke metode di bawah ini karena judul bilah navigasi diperbarui setelah tampilan dimuat. Saya mencoba menambahkan kode di atas di viewDidLoad tidak berfungsi, itu berfungsi dengan baik dalam metode viewDidAppear.

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

3

Siapapun membutuhkan versi Swift 3. redColor()telah berubah menjadi adil red.

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

2

Ini sedikit lebih mudah dibaca menggunakan literal:

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

2

Saya punya satu masalah karena ketika saya mencoba mengubah judul Item Navigasi saya secara terprogram saya tidak dapat menemukan font keluarga saya (mencoba banyak hal tetapi tidak mungkin membuatnya berjalan dengan benar) jadi saya menemukan satu solusi yang sangat bagus dan mudah di storyboard.

  1. Pertama Anda menambahkan di bawah Item Navigasi satu tampilan di tengah dan jangan lupa untuk mengatur backGroundColor ke warna yang jelas agar memiliki warna navBar yang sama:

masukkan deskripsi gambar di sini

  1. Kemudian Anda menambahkan satu Label yang dapat Anda edit (mengatur warna teks, font, ukuran ...) dalam tampilan ini
  2. Anda menambahkan batasan ke label (Top = 0, Bottom = 0, Trailing = 0 dan Leading = 0) ke View dan teks tengah label

Akhirnya Anda harus memiliki sesuatu seperti itu dalam garis besar dokumen:

masukkan deskripsi gambar di sini

Dan sesuatu seperti itu di ViewController Anda:

masukkan deskripsi gambar di sini

Semoga bisa membantu.


2

Cepat:-

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

1

Yang ini untuk alternatif Swift 4 (sudah dijawab oleh @Josh):

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

1

iOS 11

masukkan deskripsi gambar di sini

Objective-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

Untuk Objective-C untuk mengatur Font dan Warna

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

}

0

Ini jawaban untuk Swift 4 😁:

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

0

Jangan lupa untuk menambahkan nilai Raw dari kunci untuk menghindari kesalahan kompilasi.

    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.0

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

0

Tambahkan ekstensi ini

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

Tambahkan baris berikut di viewDidLoad ()

self.navigationController?.navigationBar.changeFont()

-1

Bekerja dengan cepat 3.0 Untuk mengubah warna judul Anda perlu menambahkan titleTextAttributes seperti ini

        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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.