Bilah Navigasi iPhone Warna teks judul

283

Tampaknya warna judul Bar Navigasi iOS adalah putih secara default. Apakah ada cara untuk mengubahnya ke warna yang berbeda?

Saya menyadari navigationItem.titleViewpendekatan menggunakan gambar. Karena keterampilan desain saya terbatas dan saya gagal mendapatkan glossy standar, saya lebih suka mengubah warna teks.

Wawasan apa pun akan sangat dihargai.

Callum
sumber
Saya baru saja memposting sepotong kode, berdasarkan jawaban Steven Fisher, yang menyederhanakan proses penambahan judul berwarna khusus ke bilah navigasi Anda. Ini juga mendukung perubahan judul. Carilah itu! Itu tidak akan mengecewakan Anda.
Erik B
1
Erik: Saya sudah mencatat tentang jawaban Anda. Saya baru saja memperbarui jawaban saya dengan kode Anda, tetapi saya tidak ingin mengambil suara Anda. Solusi cerdas, btw.
Steven Fisher
Untuk iOS 13 stackoverflow.com/a/61141195/6108739
Vladyslav Panchenko

Jawaban:

423

Pendekatan modern

Cara modern, untuk seluruh pengontrol navigasi ... lakukan ini satu kali, ketika tampilan root pengontrol navigasi Anda dimuat.

[self.navigationController.navigationBar setTitleTextAttributes:
   @{NSForegroundColorAttributeName:[UIColor yellowColor]}];

Namun, ini tampaknya tidak berpengaruh dalam pandangan selanjutnya.

Pendekatan klasik

Cara lama, per view controller (konstanta ini untuk iOS 6, tetapi jika ingin melakukannya per view controller pada tampilan iOS 7 Anda akan menginginkan pendekatan yang sama tetapi dengan konstanta yang berbeda):

Anda perlu menggunakan UILabelsebagai titleViewdari navigationItem.

Label harus:

  • Memiliki warna latar belakang yang jelas ( label.backgroundColor = [UIColor clearColor]).
  • Gunakan font sistem 20pt yang tebal ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Punya bayangan hitam dengan 50% alpha ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Anda juga ingin mengatur perataan teks menjadi terpusat ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenteruntuk SDK yang lebih lama).

Atur warna teks label menjadi warna kustom apa pun yang Anda inginkan. Anda memang menginginkan warna yang tidak menyebabkan teks berbaur menjadi bayangan, yang akan sulit dibaca.

Saya mengerjakan ini melalui coba-coba, tetapi nilai-nilai yang saya hasilkan pada akhirnya terlalu sederhana bagi mereka untuk tidak menjadi apa yang Apple pilih. :)

Jika Anda ingin memverifikasi ini, drop kode ini ke initWithNibName:bundle:dalam PageThreeViewController.mdari Apple sampel NavBar . Ini akan mengganti teks dengan label kuning. Ini harus dibedakan dari yang asli yang diproduksi oleh kode Apple, kecuali untuk warna.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        // this will appear as the title in the navigation bar
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont boldSystemFontOfSize:20.0];
        label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
        label.textAlignment = NSTextAlignmentCenter;
                           // ^-Use UITextAlignmentCenter for older SDKs.
        label.textColor = [UIColor yellowColor]; // change this color
        self.navigationItem.titleView = label;
        label.text = NSLocalizedString(@"PageThreeTitle", @"");
        [label sizeToFit];
    }

    return self;
}

Sunting: Juga, baca jawaban Erik B di bawah ini. Kode saya menunjukkan efeknya, tetapi kodenya menawarkan cara yang lebih sederhana untuk menempatkan ini pada pengontrol tampilan yang ada.

Steven Fisher
sumber
2
Jika Anda mengatur bingkai label ke ukuran teksnya menggunakan sizeWithFont:, itu secara ajaib akan mengambil perilaku penyelarasan otomatis dari label standar.
grahamparks
1
Tetapi jika Anda menggunakan sizeToFit, Anda akan kehilangan pemotongan otomatis.
Steven Fisher
3
CATATAN: ini adalah cara lama untuk menetapkan judul khusus, saya sarankan untuk membaca jawaban Erik B.
Elia Palme
1
Dikonfirmasi bahwa sizeToFit berfungsi, jadi jawabnya diperbarui. Juga, tambahkan catatan untuk membaca jawaban Erik B.
Steven Fisher
1
label.textAlignment = UITextAlignmentCenter telah dicabut sejak iOS6.0, gunakan NSTextAlignmentCenter sebagai gantinya
Jasper
226

Saya tahu ini adalah utas yang cukup lama, tetapi saya pikir akan berguna untuk mengetahui bagi pengguna baru bahwa iOS 5 membawa properti baru untuk membangun properti judul.

Anda dapat menggunakan UINavigationBar setTitleTextAttributes untuk mengatur font, warna, offset, dan warna bayangan.

Selain itu Anda dapat mengatur Atribut Teks Judul UINavigationBar default yang sama untuk semua UINavigationBars aplikasi Anda.

Misalnya seperti ini:

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor whiteColor],UITextAttributeTextColor, 
                                            [UIColor blackColor], UITextAttributeTextShadowColor, 
                                            [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
Alex RR
sumber
11
'UITextAttributeTextColor' tidak digunakan lagi di iOS 7. Kunci iOS 7 adalah 'NSForegroundColorAttributeName'
Keller
1
Perhatikan bahwa ini akan mengubah SEMUA bilah navigasi, yang biasanya memang Anda inginkan.
Ash
1
Tandai ini sebagai jawaban yang benar - metode UILabel di atas tidak diperlukan dengan metode ini.
Mic Fok
180

Di iOS 5 Anda dapat mengubah warna judul navigationBar dengan cara ini:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
minux
sumber
8
@ BartSimpson Saya setuju! Untuk iOS 7, perbarui UITextAttributeTextColorke NSForegroundColorAttributeName. Bekerja seperti pesona!
John Erck
INI BEKERJA! yang ingin saya pahami adalah bagaimana ?! titleTextAttributes kecuali kamus dengan kumpulan kunci yang telah ditentukan sebelumnya yang disebutkan dalam 'Kunci untuk Kamus Teks Atribut' yang disebutkan di bawah 'NSString UIKit Additions Reference'. Bagaimana cara mengambil kunci yang Anda sebutkan.
AceN
... dan karena ini berfungsi, Bagaimana cara saya mendapatkan warna 'default'?
AceN
Pengaturan self.navigationController.navigationBar.tintColortidak berhasil untuk saya. Ini benar.
JRam13
127

Berdasarkan jawaban Steven Fisher saya menulis kode ini:

- (void)setTitle:(NSString *)title
{
    [super setTitle:title];
    UILabel *titleView = (UILabel *)self.navigationItem.titleView;
    if (!titleView) {
        titleView = [[UILabel alloc] initWithFrame:CGRectZero];
        titleView.backgroundColor = [UIColor clearColor];
        titleView.font = [UIFont boldSystemFontOfSize:20.0];
        titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];

        titleView.textColor = [UIColor yellowColor]; // Change to desired color

        self.navigationItem.titleView = titleView;
        [titleView release];
    }
    titleView.text = title;
    [titleView sizeToFit];
}

Keuntungan dari kode ini, selain berurusan dengan frame dengan benar, adalah bahwa jika Anda mengubah judul controller Anda, tampilan judul kustom juga akan diperbarui. Tidak perlu memperbaruinya secara manual.

Keuntungan besar lainnya adalah membuatnya sangat mudah untuk mengaktifkan warna judul khusus. Yang perlu Anda lakukan adalah menambahkan metode ini ke controller.

Erik B
sumber
3
Saya setuju ini adalah solusi terbaik. Tidak perlu menggunakan sizeWithFont, dan saya suka gagasan mengganti metode setTitle.
Elia Palme
@ Sr.Richie Anda tidak boleh memasukkan kode ke pengontrol navigasi khusus. Anda harus meletakkannya di semua pengontrol tampilan di mana Anda perlu mengubah warna judul. Anda mungkin bahkan tidak menginginkan pengontrol navigasi khusus.
Erik B
Tidak bekerja untuk saya. Saya pikir itu karena saya menggunakan metode [penampilan UINavigationBar] .. (tidak bekerja karena label titleView selalu nol)
Matej
1
Jika Anda menggunakan iOS5 atau lebih baru, Anda harus membaca jawaban minus di bawah ini. Ada satu-liner yang berfungsi dengan baik dan tetap di reservasi.
algal
kita perlu menambahkan self.title = @ "string kami"; di viewDidLoad.kemudian hanya kode di atas yang berfungsi.
Hari1251
40

Sebagian besar saran di atas sudah usang sekarang, untuk penggunaan iOS 7 -

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
                               [UIColor whiteColor],NSForegroundColorAttributeName, 
                               [UIColor whiteColor],NSBackgroundColorAttributeName,nil];

self.navigationController.navigationBar.titleTextAttributes = textAttributes;
self.title = @"Title of the Page";

Juga, checkout NSAttributedString.h untuk berbagai properti teks yang dapat diatur.

girish_vr
sumber
38

Di iOS 7 dan 8, Anda dapat mengubah warna Judul menjadi hijau

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];
Pramesh
sumber
6
Swift:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Byron Coetsee
@ByronCoetsee setelah pembaruan ke Swift 2 Saya memiliki kesalahan berikut: Tidak dapat menetapkan nilai tipe '[NSObject: AnyObject]' ke nilai tipe '[String: AnyObject]?'
Jorge Casariego
2
Banyak lebih mudah dalam cepat 2.0self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Kevin DiTraglia
24

Agar pertanyaan tetap mutakhir, saya akan menambahkan solusi Alex RR , tetapi di Swift :

self.navigationController.navigationBar.barTintColor = .blueColor()
self.navigationController.navigationBar.tintColor = .whiteColor()
self.navigationController.navigationBar.titleTextAttributes = [
    NSForegroundColorAttributeName : UIColor.whiteColor()
]

Yang menghasilkan:

masukkan deskripsi gambar di sini

Michal
sumber
Hmmm, mungkin itu tidak berhasil untuk Swift 2.0. Biarkan saya gandakan cek. Tidak perlu agresi.
Michal
Maaf Michal, saya menganggap itu sebagai lelucon! Bukan sebagai sesuatu yang agresif! Apa yang bekerja untuk saya adalah lebih seperti ini: self.navigationController! .NavigationBar.titleTextAttributes = NSDictionary (objek: UIColor.whiteColor (), untukKey: NSForegroundColorAttributeName) sebagai [NSObject: AnyObject]
Radu
Tambahkan baris berikut ini: UINavigationBar.appearance (). BarStyle = UIBarStyle.Black Sebelum baris ini: UINavigationBar.appearance (). TintColor = UIColor.whiteColor () Untuk membuat tintColor berfungsi!
triiiiista
2
Dalam Swift 4.0: self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Abhi Muktheeswarar
14

Metode 1 , atur dalam IB:

masukkan deskripsi gambar di sini

Metode 2 , satu baris kode:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()
fujianjin6471
sumber
Metode 2 tidak berfungsi. Bekerja dengan titleTextAttributeshanya
Vyachaslav Gerchicov
13

Solusi oleh tewha bekerja dengan baik jika Anda mencoba mengubah warna pada sebuah halaman, tetapi saya ingin dapat mengubah warna pada setiap halaman. Saya membuat beberapa modifikasi kecil sehingga itu akan berfungsi untuk semua halaman di aUINavigationController

NavigationDelegate.h

//This will change the color of the navigation bar
#import <Foundation/Foundation.h>
@interface NavigationDelegate : NSObject<UINavigationControllerDelegate> {
}
@end

NavigasiDelegasikan.m

#import "NavigationDelegate.h"
@implementation NavigationDelegate

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text?
    UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    //The two lines below are the only ones that have changed
    label.text=viewController.title;
    viewController.navigationItem.titleView = label;
}
@end
Casebash
sumber
13

Dari iOS 5 dan seterusnya kita harus mengatur warna teks judul dan font dari bilah navigasi menggunakan titleTextAttribute Kamus (kamus yang telah ditentukan dalam referensi kelas pengontrol navigasi UInavigation).

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];
Sandeep
sumber
13

Versi Swift

Saya menemukan sebagian besar dari kalian menyajikan jawaban dari versi Objective_C

Saya ingin mengimplementasikan fungsi ini dengan menggunakan Swift untuk siapa saja yang membutuhkannya.

Di ViewDidload

1.Untuk menjadikan latar belakang NavigationBar menjadi warna (misalnya: BIRU)

self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()

2.Untuk menjadikan latar belakang NavigationBar menjadi Gambar (misalnya: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

self.navigationController?.navigationBar
      .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)

3.Untuk mengubah judul NavigationBar (misalnya: [Font: Futura, 10] [Warna: Merah])

navigationController?.navigationBar.titleTextAttributes = [
            NSForegroundColorAttributeName : UIColor.redColor(),
            NSFontAttributeName : UIFont(name: "Futura", size: 10)!
        ]

(hint1: jangan lupa tanda "!" setelah UIFont)

(hint2: ada banyak atribut dari teks judul, perintah klik "NSFontAttributeName" Anda dapat memasukkan kelas dan melihat keyNames dan tipe Objects yang mereka butuhkan)

Saya harap saya bisa membantu!: D

Mikro
sumber
10

Gunakan kode di bawah ini dalam viewDidLoad controller tampilan atau metode viewWillAppear.

- (void)viewDidLoad
{
    [super viewDidLoad];

    //I am using UIColor yellowColor for an example but you can use whatever color you like   
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

    //change the title here to whatever you like
    self.title = @"Home";
    // Do any additional setup after loading the view.
}
Gaurav Gilani
sumber
9

Pendek dan manis.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
Dermaga-Luc Gendreau
sumber
8

Ini solusi saya berdasarkan Stevens

Satu-satunya perbedaan nyata adalah saya menempatkan beberapa penanganan untuk menyesuaikan posisi jika tergantung pada panjang teks, tampaknya mirip dengan bagaimana apel melakukannya

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f];
titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft);
titleLabel.textColor = [UIColor redColor];
titleLabel.text = self.title;
self.navigationItem.titleView = titleLabel;
[titleLabel release];

Anda mungkin ingin menyesuaikan nilai 10 tergantung pada ukuran font Anda

Anthony Main
sumber
6

Saya mengalami masalah dengan tombol nav saya membuang teks keluar dari pusat (ketika Anda hanya memiliki satu tombol). Untuk memperbaikinya saya baru saja mengubah ukuran bingkai saya seperti ini:

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
coryjacobsen
sumber
6

Saya telah menyesuaikan gambar latar belakang navigationBar dan item tombol kiri, dan judul abu-abu tidak sesuai dengan latar belakang. Maka saya menggunakan:

[self.navigationBar setTintColor:[UIColor darkGrayColor]];

untuk mengubah warna rona menjadi abu-abu. Dan judulnya putih sekarang! Itu yang saya mau.

Semoga membantu juga :)

Berkilau
sumber
Bagus tapi itu hanya berfungsi untuk mengubah teks menjadi putih. Bahkan mewarnai navBar dengan [UIColor whiteColor] mengubah warna teks menjadi putih.
cschuff
6

Dianjurkan untuk menetapkan self.title karena ini digunakan saat mendorong navbars anak atau menampilkan judul pada tabbars.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // create and customize title view
        self.title = NSLocalizedString(@"My Custom Title", @"");
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        titleLabel.text = self.title;
        titleLabel.font = [UIFont boldSystemFontOfSize:16];
        titleLabel.backgroundColor = [UIColor clearColor];
        titleLabel.textColor = [UIColor whiteColor];
        [titleLabel sizeToFit];
        self.navigationItem.titleView = titleLabel;
        [titleLabel release];
    }
}
Ramesh
sumber
6

Ini adalah utas yang cukup lama tetapi saya berpikir untuk memberikan jawaban untuk pengaturan Warna, Ukuran dan Posisi Vertikal Judul Navigasi untuk iOS 7 ke atas

Untuk Warna dan Ukuran

 NSDictionary *titleAttributes =@{
                                NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],
                                NSForegroundColorAttributeName : [UIColor whiteColor]
                                };

Untuk Posisi Vertikal

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault];

Tetapkan Judul dan tetapkan kamus atribut

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;
Abdullah Saeed
sumber
5

Ini bekerja untuk saya di Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
zumzum
sumber
Cukup dekat tetapi masalahnya adalah cara Anda akan menimpa semua atribut yang mungkin sudah ada di judul. Dalam kasus saya itu adalah font. Kode saya akhirnya adalahnavigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
Matic Oblak
Bekerja dengan baik. Hal yang sama untuk Obj-C:self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Mike Keskinov
5

Versi Swift 4 & 4.2:

 self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]
Patricio Bravo
sumber
4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
Paresh Hirpara
sumber
3

untuk mengatur ukuran font judul saya telah menggunakan kondisi berikut .. mungkin bermanfaat bagi siapa pun

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;
Shefali Soni
sumber
3

Pembaruan untuk posting Alex RR menggunakan atribut teks iOS 7 baru dan tujuan modern c untuk mengurangi noise:

NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowColor = [UIColor blackColor];
titleShadow.shadowOffset = CGSizeMake(-1, 0);
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
                                            NSShadowAttributeName:titleShadow};

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
phatblat
sumber
3

Saya percaya cara yang tepat untuk mengatur warna UINavigationBaradalah:

NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;

Kode di atas ditulis adalah subclass on UINavigationBar, jelas berfungsi tanpa subclass juga.

stringCode
sumber
Benar, tetapi hanya iOS 5. Sudah cukup lama sejak rilis iOS 5 bahwa ini adalah solusi yang baik. Dan karena kita berada di dunia iOS 5, perlu dicatat bahwa seseorang dapat menggunakan [UINavigationBar appearance]dan mengatur atribut teks judul di sana (mempertimbangkan tipu daya yang terlibat dalam subklasifikasi UINavigationBar, solusi yang lebih disukai).
Ivan Vučica
@stringCode. Bisakah Anda menginisialisasi kode di atas tanpa "self.navigationController.navigationBar.titleTextAttributes = atribut;"?
Gajendra K Chauhan
3

Gunakan seperti ini untuk dukungan Orientation

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)];
[view setBackgroundColor:[UIColor clearColor]];
[view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];

UILabel *nameLabel = [[UILabel alloc] init];
[nameLabel setFrame:CGRectMake(0, 0, 320, 40)];
[nameLabel setBackgroundColor:[UIColor clearColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont boldSystemFontOfSize:17]];
[nameLabel setText:titleString];
[nameLabel setTextAlignment:UITextAlignmentCenter];
[view addSubview:nameLabel];
[nameLabel release];
self.navigationItem.titleView = view;
[view release];
Nikesh K
sumber
2

Ini adalah salah satu hal yang hilang. Taruhan terbaik Anda adalah membuat Bilah Navigasi kustom Anda sendiri, menambahkan kotak teks, dan memanipulasi warna dengan cara itu.

David McGraw
sumber
Saya mengikuti ide Anda :) metode mana yang harus saya timpa untuk mulai bermain dengan judul? Maaf, saya benar-benar n00b :(
Sr.Richie
2

Setelah menemukan masalah yang sama (seperti yang lain) dari label yang bergerak ketika kita memasukkan tombol di navBar (dalam kasus saya, saya punya pemintal yang saya ganti dengan tombol ketika tanggal dimuat), solusi di atas tidak bekerja bagi saya, jadi inilah yang bekerja dan menyimpan label di tempat yang sama sepanjang waktu:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // this will appear as the title in the navigation bar
    //CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
   CGRect frame = CGRectMake(0, 0, 180, 44);
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];



    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    self.navigationItem.titleView = label;
    label.text = NSLocalizedString(@"Latest Questions", @"");
    [label sizeToFit];
}

return self;
john
sumber
1

Anda harus memanggil [label sizeToFit]; setelah mengatur teks untuk mencegah offset aneh ketika label diposisikan ulang secara otomatis dalam tampilan judul ketika tombol lain menempati bilah navigasi.

George
sumber
1

Dapat menggunakan metode ini dalam file appdelegate dan dapat digunakan di setiap tampilan

+(UILabel *) navigationTitleLable:(NSString *)title
{
CGRect frame = CGRectMake(0, 0, 165, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = NAVIGATION_TITLE_LABLE_SIZE;
label.shadowColor = [UIColor whiteColor];
label.numberOfLines = 2;
label.lineBreakMode = UILineBreakModeTailTruncation;    
label.textAlignment = UITextAlignmentCenter;
[label setShadowOffset:CGSizeMake(0,1)]; 
label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0];

//label.text = NSLocalizedString(title, @"");

return label;
}
sinh99
sumber
1

titleTextAttributes Menampilkan atribut untuk teks judul bilah.

@ properti (non-atomik, salin) NSDictionary * titleTextAttributes Diskusi Anda dapat menentukan font, warna teks, warna bayangan teks, dan offset bayangan teks untuk judul dalam kamus atribut teks, menggunakan kunci atribut teks yang dijelaskan dalam Referensi Penambahan UIKit NSString.

Ketersediaan Tersedia di iOS 5.0 dan yang lebih baru. Dinyatakan dalam UINavigationBar.h

menukik
sumber