iPhone Pasek nawigacji Kolor tekstu tytułu


283

Wygląda na to, że tytuł tytułu paska nawigacji iOS jest domyślnie biały. Czy istnieje sposób, aby zmienić go na inny kolor?

Zdaję sobie sprawę z navigationItem.titleViewpodejścia wykorzystującego obraz. Ponieważ moje umiejętności projektowania są ograniczone i nie udało mi się uzyskać standardowego połysku, wolę zmienić kolor tekstu.

Wszelkie informacje będą mile widziane.


Właśnie opublikowałem fragment kodu oparty na odpowiedzi Stevena Fishera, który upraszcza proces dodawania niestandardowych kolorowych tytułów do paska nawigacji. Obsługuje również zmianę tytułu. Szukaj tego! Nie zawiedzie cię.
Erik B,

1
Erik: Włożyłem notatkę o twojej odpowiedzi do mojej. Chciałbym tylko zaktualizować swoją odpowiedź za pomocą Twojego kodu, ale nie chciałbym odbierać twoich głosów. Sprytne rozwiązanie, btw.
Steven Fisher

Odpowiedzi:


423

Nowoczesne podejście

Nowoczesny sposób dla całego kontrolera nawigacyjnego… zrób to raz, gdy załadowany jest widok główny kontrolera nawigacyjnego.

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

Nie wydaje się to jednak mieć wpływu na kolejne widoki.

Klasyczne podejście

Stary sposób na kontroler widoku (te stałe są dla iOS 6, ale jeśli chcesz to zrobić dla kontrolera widoku na wygląd iOS 7, będziesz chciał tego samego podejścia, ale z różnymi stałymi):

Trzeba użyć UILabeljako titleViewz navigationItem.

Etykieta powinna:

  • Mają wyraźny kolor tła ( label.backgroundColor = [UIColor clearColor]).
  • Użyj pogrubionej czcionki systemowej 20pt ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Mają cień czerni z 50% alfa ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Będziesz także chciał ustawić wyrównanie tekstu na wyśrodkowane ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterdla starszych zestawów SDK).

Ustaw kolor tekstu etykiety na dowolny niestandardowy kolor. Potrzebujesz koloru, który nie powoduje wtopienia się tekstu w cień, co byłoby trudne do odczytania.

Opracowałem to metodą prób i błędów, ale wartości, które wymyśliłem, są ostatecznie zbyt proste, aby nie były tym, co wybrał Apple. :)

Jeśli chcesz to zweryfikować, upuść ten kod initWithNibName:bundle:w próbce NavBarPageThreeViewController.m firmy Apple . Spowoduje to zastąpienie tekstu żółtą etykietą. Powinno to być nie do odróżnienia od oryginalnego kodu Apple'a, z wyjątkiem koloru.

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

Edycja: Przeczytaj także odpowiedź Erika B. Mój kod pokazuje efekt, ale jego kod oferuje prostszy sposób na umieszczenie go w istniejącym kontrolerze widoku.


2
Jeśli ustawisz ramkę etykiety na rozmiar jej tekstu za pomocą sizeWithFont:, magicznie przejmie ona zachowanie automatycznego wyrównywania standardowej etykiety.
grahamparks

1
Ale jeśli użyjesz sizeToFit, stracisz automatyczne obcinanie.
Steven Fisher

3
UWAGA: jest to stary sposób na ustawienie niestandardowego tytułu, proponuję przeczytać odpowiedź Erika B.
Elia Palme

1
Potwierdzono, że sizeToFit działa, więc zaktualizowano odpowiedź. Dodano także notatkę, aby przeczytać odpowiedź Erika B.
Steven Fisher

1
label.textAlignment = UITextAlignmentCenter jest depricated od iOS6.0, zamiast tego użyj NSTextAlignmentCenter
Jasper

226

Wiem, że jest to dość stary wątek, ale myślę, że warto byłoby wiedzieć dla nowych użytkowników, że iOS 5 wprowadza nową właściwość do ustalania właściwości tytułu.

Możesz użyć paska narzędzi UINavigation setTitleTextAttributesdo ustawienia czcionki, koloru, przesunięcia i koloru cienia.

Ponadto możesz ustawić te same domyślne atrybuty tekstu tytułu UINavigationBar dla wszystkich UINavigationBarsaplikacji.

Na przykład tak:

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

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

11
„UITextAttributeTextColor” jest przestarzałe w iOS 7. Kluczem iOS 7 jest „NSForegroundColorAttributeName”
Keller

1
Pamiętaj, że spowoduje to zmianę WSZYSTKICH pasków nawigacyjnych, co zwykle jest tym, czego chcesz.
Ash

1
Proszę zaznaczyć to jako poprawną odpowiedź - powyższa metoda UILabel nie jest konieczna przy tych dostępnych metodach.
Mic Fok

180

W iOS 5 możesz zmienić kolor tytułu paska nawigacji w następujący sposób:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

8
@BartSimpson Zgadzam się! W systemie iOS 7 zaktualizuj UITextAttributeTextColordo NSForegroundColorAttributeName. Działa jak marzenie!
John Erck,

TO DZIAŁA! co chcę zrozumieć, to jak ?! titleTextAttributes oprócz słownika ze wstępnie zdefiniowanym zestawem kluczy wymienionych w „Kluczach słowników atrybutów tekstowych” wymienionych w „NSString UIKit Additions Reference”. Jak zajmuje klucz, o którym wspomniałeś.
AceN

... a ponieważ działa, jak uzyskać domyślny odcień?
AceN

Ustawienie self.navigationController.navigationBar.tintColornie działało dla mnie. Tak się stało.
JRam13

127

Na podstawie odpowiedzi Stevena Fishera napisałem ten fragment kodu:

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

Zaletą tego kodu, oprócz poprawnego obchodzenia się z ramką, jest to, że jeśli zmienisz tytuł kontrolera, niestandardowy widok tytułu również zostanie zaktualizowany. Nie ma potrzeby ręcznej aktualizacji.

Kolejną dużą zaletą jest to, że bardzo łatwo można włączyć niestandardowy kolor tytułu. Wszystko, co musisz zrobić, to dodać tę metodę do kontrolera.


3
Zgadzam się, że to zdecydowanie najlepsze rozwiązanie. Nie trzeba używać sizeWithFont, a podoba mi się pomysł zastąpienia metody setTitle.
Elia Palme,

@ Sr.Richie Nie należy umieszczać kodu w niestandardowym kontrolerze nawigacyjnym. Powinieneś umieścić go we wszystkich kontrolerach widoku, w których musisz zmienić kolor tytułu. Prawdopodobnie nie chcesz nawet niestandardowego kontrolera nawigacyjnego.
Erik B

Nie działa dla mnie. Myślę, że to dlatego, że użyłem metody [wygląd UINavigationBar] .. (nie działa, ponieważ tytuł titleView jest zawsze zerowy)
Matej

1
Jeśli korzystasz z iOS5 lub nowszego, powinieneś przeczytać odpowiedź minus poniżej. Jest jeden liniowiec, który działa dobrze i pozostaje w rezerwacji.
algal

musimy dodać self.title = @ "nasz ciąg"; w viewDidLoad.then działa tylko powyższy kod.
Hari1251,

40

Większość powyższych sugestii jest już nieaktualna, w przypadku systemu iOS 7 -

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

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

Sprawdź także NSAttributString.h pod kątem różnych właściwości tekstu, które można ustawić.


38

W iOS 7 i 8 możesz zmienić kolor tytułu, powiedzmy zielony

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

6
Szybki:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Byron Coetsee

@ByronCoetsee po aktualizacji do Swift 2 Mam następujący błąd: Nie można przypisać wartości typu „[NSObject: AnyObject]” do wartości typu „[String: AnyObject]?”
Jorge Casariego,

2
Dużo łatwiej w szybkim 2.0self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Kevin DiTraglia,

24

Aby pytanie było aktualne, dodam rozwiązanie Alex RR , ale w Swift :

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

Które wyniki:

wprowadź opis zdjęcia tutaj


Hmmm, może to nie działa w Swift 2.0. Pozwól, że sprawdzę dwukrotnie. Nie ma jednak potrzeby agresji.
Michał

Przepraszam Michał, myślałem, że to żart! Nie jako coś agresywnego! To, co zadziałało, było bardziej takie: self.navigationController! .NavigationBar.titleTextAttributes = NSDictionary (object: UIColor.whiteColor (), forKey: NSForegroundColorAttributeName) jako [NSObject: AnyObject]
Radu

Dodaj następujący wiersz: UINavigationBar.appearance (). BarStyle = UIBarStyle.Black Przed tym wierszem: UINavigationBar.appearance (). TintColor = UIColor.whiteColor () Aby tintColor działał!
triiiiista

2
W Swift 4.0: self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributStringKey.foregroundColor: UIColor.white]
Abhi Muktheeswarar

14

Metoda 1 , ustaw ją w IB:

wprowadź opis zdjęcia tutaj

Metoda 2 , jeden wiersz kodu:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()

metoda 2 nie działa. Działa titleTextAttributestylko z
Wiaczasław Gerchicow

13

Rozwiązanie firmy tewha działa dobrze, jeśli próbujesz zmienić kolor na stronie, ale chcę mieć możliwość zmiany koloru na każdej stronie. Wprowadziłem małe modyfikacje, aby działały na wszystkich stronachUINavigationController

NavigationDelegate.h

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

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

Począwszy od iOS 5, musimy ustawić kolor tekstu czcionki i czcionkę paska nawigacyjnego za pomocą TitleTextAttribute Dictionary (predefiniowany słownik w odwołaniu do klasy kontrolera UInavigation).

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

13

Szybka wersja

Odkryłem, że większość z was przedstawiła odpowiedzi na wersję Objective_C

Chciałbym zaimplementować tę funkcję, używając Swift dla każdego, kto jej potrzebuje.

W ViewDidload

1.Aby kolor tła paska nawigacyjnego stał się kolorowy (na przykład NIEBIESKI)

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

2. Aby tło paska nawigacyjnego zmieniło się w Obraz (na przykład: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

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

3. Aby zmienić tytuł paska nawigacji (na przykład: [Czcionka: Futura, 10] [Kolor: Czerwony])

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

(wskazówka 1: nie zapomnij znaku „!” po UIFont)

(wskazówka 2: istnieje wiele atrybutów tekstu tytułowego, kliknij polecenie „NSFontAttributeName”, aby wprowadzić klasę i wyświetlić nazwy kluczy oraz wymagane typy obiektów)

Mam nadzieję, że mogę pomóc!: D


10

Użyj poniższego kodu w dowolnej metodzie viewDidLoad lub viewWillAppear kontrolera widoku.

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

Krótkie i słodkie.

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

8

To jest moje rozwiązanie oparte na Stevensie

Jedyną prawdziwą różnicą jest to, że wprowadzam pewne zmiany w dostosowywaniu pozycji, jeśli w zależności od długości tekstu wydaje się być podobny do sposobu, w jaki robi to jabłko

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

Możesz dostosować wartość 10 w zależności od rozmiaru czcionki


6

Wystąpił problem z moimi przyciskami nawigacyjnymi wyrzucającymi tekst poza środek (gdy masz tylko jeden przycisk). Aby to naprawić, właśnie zmieniłem rozmiar ramki tak:

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

6

Dostosowałem obraz tła paska nawigacji i element lewego przycisku, a szary tytuł nie pasuje do tła. Następnie używam:

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

zmienić kolor odcienia na szary. A tytuł jest teraz biały! To jest to czego chce.

Mam nadzieję również pomóc :)


Fajnie, ale to działa tylko w przypadku zmiany tekstu na biały. Nawet przyciemnienie paska nawigacyjnego za pomocą [UIColor whiteColor] zmienia kolor tekstu na biały.
cschuff,

6

Zalecane jest ustawienie self.title, ponieważ jest on używany podczas przesuwania dziecięcych pasków nawigacyjnych lub pokazywania tytułu na paskach.

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

To dość stary wątek, ale myślę o udzieleniu odpowiedzi na ustawienie koloru, rozmiaru i pozycji pionowej tytułu paska nawigacji dla systemu iOS 7 i nowszych

Dla koloru i rozmiaru

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

Do pozycji pionowej

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

Ustaw tytuł i przypisz słownik atrybutów

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

5

To działa dla mnie w Swift:

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

Całkiem blisko, ale chodzi o to, że na swój sposób zastąpisz wszystkie możliwe atrybuty już w tytule. W moim przypadku była to czcionka. Skończyłem z kodemnavigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
Matic Oblak

Działa dobrze. To samo dotyczy Obj-C:self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Mike Keskinov

5

Wersja Swift 4 i 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

aby ustawić rozmiar czcionki tytułu użyłem następujących warunków .. może być pomocny dla każdego

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

3

Aktualizacja posta Alexa RR przy użyciu nowych atrybutów tekstowych iOS 7 i nowoczesnego celu c w celu zmniejszenia hałasu:

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

Uważam, że właściwym sposobem ustawienia koloru UINavigationBarjest:

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

Powyższy kod jest napisany w podklasie UINavigationBar, oczywiście działa również bez tej podklasy.


Prawidłowe, ale tylko iOS 5. Minęło już wystarczająco dużo czasu od wydania iOS 5, że jest to dobre rozwiązanie. A ponieważ jesteśmy w świecie iOS 5, warto zauważyć, że można tam użyć [UINavigationBar appearance]i ustawić atrybuty tekstu tytułowego (biorąc pod uwagę podstępność związaną z podklasowaniem UINavigationBar, preferowanym rozwiązaniem).
Ivan Vučica,

@stringCode. Czy możesz zainicjować powyższy kod bez „self.navigationController.navigationBar.titleTextAttributes = atrybuty;”?
Gajendra K Chauhan

3

Użyj tego do obsługi Orientacji

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

To jedna z tych rzeczy, których brakuje. Najlepszym rozwiązaniem jest utworzenie własnego paska nawigacji, dodanie pola tekstowego i manipulowanie w ten sposób kolorem.


Podążam za twoim pomysłem :) którą metodę powinienem zastąpić, aby zacząć grać z tytułem? Przepraszam, naprawdę jestem n00b :(
Sr.Richie

2

Po napotkaniu tego samego problemu (jak inni) na etykiecie, która porusza się po wstawieniu przycisku w pasku nawigacyjnym (w moim przypadku mam pokrętło, które zastępuję przyciskiem po załadowaniu daty), powyższe rozwiązania nie działały dla mnie, więc oto, co działało i utrzymywało etykietę w tym samym miejscu przez cały czas:

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

Powinieneś wywołać [label sizeToFit]; po ustawieniu tekstu, aby zapobiec dziwnym przesunięciom, gdy etykieta jest automatycznie zmieniana w widoku tytułowym, gdy inne przyciski zajmują pasek nawigacyjny.


1

Może korzystać z tej metody w pliku appdelegate i może być używany w każdym widoku

+(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 Wyświetl atrybuty tekstu tytułu paska.

@property (nonatomic, kopia) NSDictionary * titleTextAttributes Dyskusja Możesz określić czcionkę, kolor tekstu, kolor cienia tekstu i przesunięcie cienia tekstu dla tytułu w słowniku atrybutów tekstu, używając kluczy atrybutów tekstu opisanych w NSString UIKit Additions Reference.

Dostępność Dostępne w iOS 5.0 i nowszych. Zadeklarowano w UINavigationBar.h

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.