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.


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

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.


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];

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]};

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.


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.


38

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

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];

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


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()

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

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]];

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


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

9

Pendek dan manis.

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

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


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);

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 :)


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];
    }
}

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;

5

Ini bekerja untuk saya di Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]

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]

4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];

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;

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];

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.


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];

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.


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;

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.


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;
}

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

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.