iPhone Navigationsleiste Titeltextfarbe

283

Es scheint, dass die Titelfarbe der iOS-Navigationsleiste standardmäßig weiß ist. Gibt es eine Möglichkeit, die Farbe zu ändern?

Mir ist der navigationItem.titleViewAnsatz mit einem Bild bekannt. Da meine Designfähigkeiten begrenzt sind und ich nicht den Standardglanz erhalten habe, ziehe ich es vor, die Textfarbe zu ändern.

Jeder Einblick wäre sehr dankbar.

Callum
quelle
Ich habe gerade einen Code veröffentlicht, der auf der Antwort von Steven Fisher basiert und das Hinzufügen von benutzerdefinierten farbigen Titeln zu Ihrer Navigationsleiste vereinfacht. Es unterstützt auch das Ändern des Titels. Such danach! Es wird dich nicht enttäuschen.
Erik B
1
Erik: Ich habe eine Notiz über deine Antwort in meine geschrieben. Ich würde nur meine Antwort mit Ihrem Code aktualisieren, aber ich möchte Ihre Stimmen nicht aufnehmen. Clevere Lösung, übrigens.
Steven Fisher
Für IOS 13 stackoverflow.com/a/61141195/6108739
Vladyslav Panchenko

Antworten:

423

Moderner Ansatz

Die moderne Methode für den gesamten Navigationscontroller… tun Sie dies einmal, wenn die Stammansicht Ihres Navigationscontrollers geladen ist.

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

Dies scheint jedoch in nachfolgenden Ansichten keine Auswirkungen zu haben.

Klassischer Ansatz

Der alte Weg, pro Ansichts-Controller (diese Konstanten gelten für iOS 6, aber wenn Sie dies pro Ansichts-Controller unter iOS 7 tun möchten, möchten Sie denselben Ansatz, jedoch mit unterschiedlichen Konstanten):

Sie müssen ein UILabelals das titleViewder verwenden navigationItem.

Das Etikett sollte:

  • Haben Sie eine klare Hintergrundfarbe ( label.backgroundColor = [UIColor clearColor]).
  • Verwenden Sie eine fette 20pt-Systemschrift ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Haben Sie einen schwarzen Schatten mit 50% Alpha ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Sie möchten die Textausrichtung ebenfalls auf zentriert einstellen ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterfür ältere SDKs).

Stellen Sie die Etikettentextfarbe auf die gewünschte benutzerdefinierte Farbe ein. Sie möchten eine Farbe, bei der der Text nicht in Schatten übergeht, was schwer zu lesen wäre.

Ich habe das durch Ausprobieren herausgefunden, aber die Werte, die ich mir ausgedacht habe, sind letztendlich zu einfach, als dass sie nicht das wären, was Apple ausgewählt hat. :) :)

Wenn Sie dies überprüfen wollen, fällt diesen Code in initWithNibName:bundle:in PageThreeViewController.mdem Apple NavBar Probe . Dadurch wird der Text durch ein gelbes Etikett ersetzt. Dies sollte mit Ausnahme der Farbe nicht von dem Original zu unterscheiden sein, das von Apples Code erstellt wurde.

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

Bearbeiten: Lesen Sie auch die Antwort von Erik B unten. Mein Code zeigt den Effekt, aber sein Code bietet eine einfachere Möglichkeit, ihn auf einem vorhandenen Ansichts-Controller zu platzieren.

Steven Fisher
quelle
2
Wenn Sie den Beschriftungsrahmen mithilfe von auf die Größe seines Texts sizeWithFont:einstellen, übernimmt er auf magische Weise das automatische Ausrichtungsverhalten der Standardbeschriftung.
Grahamparks
1
Wenn Sie jedoch sizeToFit verwenden, verlieren Sie die automatische Kürzung.
Steven Fisher
3
HINWEIS: Dies ist die alte Methode zum
Elia Palme
1
Bestätigt, dass sizeToFit funktioniert, daher aktualisierte Antwort. Außerdem wurde eine Notiz hinzugefügt, um die Antwort von Erik B zu lesen.
Steven Fisher
1
label.textAlignment = UITextAlignmentCenter wurde seit iOS6.0 beraubt. Verwenden Sie stattdessen NSTextAlignmentCenter
Jasper
226

Ich weiß, dass dies ein ziemlich alter Thread ist, aber ich denke, es wäre nützlich, für neue Benutzer zu wissen, dass iOS 5 eine neue Eigenschaft zum Einrichten von Titeleigenschaften bietet.

Mit UINavigationBar können Sie setTitleTextAttributesSchriftart, Farbe, Versatz und Schattenfarbe einstellen.

Darüber hinaus können Sie für alle UINavigationBarsin Ihrer Anwendung dieselben Standard-Titeltextattribute von UINavigationBar festlegen .

Zum Beispiel so:

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

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
Alex RR
quelle
11
'UITextAttributeTextColor' ist in iOS 7 veraltet. Der iOS 7-Schlüssel lautet 'NSForegroundColorAttributeName'
Keller
1
Beachten Sie, dass dadurch ALLE Navigationsleisten geändert werden, was normalerweise sowieso gewünscht wird.
Ash
1
Bitte markieren Sie dies als die richtige Antwort - die oben genannte UILabel-Methode ist bei diesen verfügbaren Methoden nicht erforderlich.
Mic Fok
180

In iOS 5 können Sie die Titelfarbe der Navigationsleiste folgendermaßen ändern:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
minux
quelle
8
@ BartSimpson Ich stimme zu! Aktualisieren Sie für iOS 7 UITextAttributeTextColorauf NSForegroundColorAttributeName. Klappt wunderbar!
John Erck
DAS FUNKTIONIERT! was ich verstehen will ist wie?! titleTextAttributes nimmt ein Wörterbuch mit einem vordefinierten Schlüsselsatz aus, der unter "Schlüssel für Wörterbücher für Textattribute" unter "NSString UIKit Additions Reference" aufgeführt ist. Wie nimmt es den Schlüssel, den Sie erwähnt haben.
AceN
... und da es funktioniert, wie bekomme ich den 'Standard'-Farbton?
AceN
Die Einstellung self.navigationController.navigationBar.tintColorhat bei mir nicht funktioniert. Das hat es getan.
JRam13
127

Basierend auf Steven Fischers Antwort habe ich diesen Code geschrieben:

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

Der Vorteil dieses Codes besteht neben dem ordnungsgemäßen Umgang mit dem Frame darin, dass beim Ändern des Titels Ihres Controllers auch die benutzerdefinierte Titelansicht aktualisiert wird. Sie müssen es nicht manuell aktualisieren.

Ein weiterer großer Vorteil ist, dass es wirklich einfach ist, benutzerdefinierte Titelfarben zu aktivieren. Sie müssen diese Methode lediglich zum Controller hinzufügen.

Erik B.
quelle
3
Ich bin damit einverstanden, dass dies definitiv die beste Lösung ist. Sie müssen sizeWithFont nicht verwenden, und ich mag die Idee, die setTitle-Methode zu überschreiben.
Elia Palme
@ Sr.Richie Sie sollten den Code nicht in einen benutzerdefinierten Navigationscontroller einfügen. Sie sollten es in alle Ansichts-Controller einfügen, in denen Sie die Farbe des Titels ändern müssen. Sie möchten wahrscheinlich nicht einmal einen benutzerdefinierten Navigationscontroller.
Erik B
Funktioniert bei mir nicht Ich denke, es liegt daran, dass ich die Methode [UINavigationBar Erscheinungsbild] verwendet habe. (Funktioniert nicht, weil das Label titleView immer gleich Null ist.)
Matej
1
Wenn Sie mit iOS5 oder höher arbeiten, sollten Sie die Antwort von minus unten lesen. Es gibt einen Einzeiler, der gut funktioniert und bei der Reservierung bleibt.
Algen
wir müssen self.title = @ "our string" hinzufügen; in viewDidLoad.then funktioniert nur der obige Code.
Hari1251
40

Die meisten der oben genannten Vorschläge sind jetzt für iOS 7 veraltet -

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

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

Überprüfen Sie auch die Datei NSAttributedString.h auf verschiedene Texteigenschaften, die festgelegt werden können.

girish_vr
quelle
38

In IOS 7 und 8 können Sie die Farbe des Titels ändern, um beispielsweise Grün zu sagen

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];
Pramesh
quelle
6
Swift:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Byron Coetsee
@ByronCoetsee nach dem Update auf Swift 2 Ich habe den folgenden Fehler: Kann einem Wert vom Typ '[String: AnyObject] keinen Wert vom Typ' [NSObject: AnyObject] 'zuweisen?'
Jorge Casariego
2
Viel einfacher in Swift 2.0self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Kevin DiTraglia
24

Um die Frage auf dem neuesten Stand zu halten, werde ich die Alex RR- Lösung hinzufügen , aber in Swift :

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

Welche Ergebnisse zu:

Geben Sie hier die Bildbeschreibung ein

Michal
quelle
Hmmm, vielleicht funktioniert es nicht für Swift 2.0. Lassen Sie mich noch einmal überprüfen. Keine Notwendigkeit für Aggression.
Michal
Sorry Michal, ich dachte das als Witz! Nicht als etwas Aggressives! Was für mich funktionierte, war eher so: self.navigationController! .NavigationBar.titleTextAttributes = NSDictionary (Objekt: UIColor.whiteColor (), forKey: NSForegroundColorAttributeName) als [NSObject: AnyObject]
Radu
Fügen Sie die folgende Zeile hinzu: UINavigationBar.appearance (). BarStyle = UIBarStyle.Black Vor dieser Zeile: UINavigationBar.appearance (). TintColor = UIColor.whiteColor () Damit tintColor funktioniert!
Triiiiista
2
In Swift 4.0: self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Abhi Muktheeswarar
14

Methode 1 , setzen Sie es in IB:

Geben Sie hier die Bildbeschreibung ein

Methode 2 , eine Codezeile:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()
fujianjin6471
quelle
Methode 2 funktioniert nicht. Funktioniert titleTextAttributesnur mit
Vyachaslav Gerchicov
13

Die Lösung von tewha funktioniert gut, wenn Sie versuchen, die Farbe auf einer Seite zu ändern, aber ich möchte in der Lage sein, die Farbe auf jeder Seite zu ändern. Ich habe einige kleine Änderungen vorgenommen, damit es für alle Seiten auf einem funktioniertUINavigationController

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
Casebash
quelle
13

Ab iOS 5 müssen wir die Titeltextfarbe und die Schriftart der Navigationsleiste mithilfe des titleTextAttribute-Wörterbuchs (vordefiniertes Wörterbuch in der Klassenreferenz des UInavigation-Controllers) festlegen.

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

Schnelle Version

Ich fand, dass die meisten von euch die Antworten der Objective_C-Version präsentiert haben

Ich möchte diese Funktion implementieren, indem ich Swift für jeden verwende, der sie benötigt.

In ViewDidload

1.Um den Navigationsleistenhintergrund farbig zu machen (zum Beispiel: BLAU)

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

2.Um den Navigationsleistenhintergrund zu einem Bild zu machen (zum Beispiel: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

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

3.Um den Titel der Navigationsleiste zu ändern (zum Beispiel: [Schriftart: Futura, 10] [Farbe: Rot])

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

(Hinweis 1: Vergessen Sie nicht das "!" - Zeichen nach dem UIFont)

(Hinweis 2: Es gibt viele Attribute des Titeltextes. Klicken Sie mit dem Befehl auf "NSFontAttributeName". Geben Sie die Klasse ein und zeigen Sie die benötigten Schlüsselnamen und Objekttypen an.)

Ich hoffe ich kann helfen !: D.

Microos
quelle
10

Verwenden Sie den folgenden Code in einer beliebigen View Controller-Methode viewDidLoad oder 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
quelle
9

Kurz und bündig.

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

Dies ist meine Lösung basierend auf Stevens

Der einzige wirkliche Unterschied besteht darin, dass ich etwas Handling zum Anpassen der Position einsetze, wenn es abhängig von der Textlänge ähnlich zu sein scheint, wie Apple es macht

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

Möglicherweise möchten Sie den Wert 10 abhängig von Ihrer Schriftgröße anpassen

Anthony Main
quelle
6

Ich bin auf das Problem gestoßen, dass meine Navigationsschaltflächen den Text aus der Mitte geworfen haben (wenn Sie nur eine Schaltfläche haben). Um das zu beheben, habe ich gerade meine Rahmengröße wie folgt geändert:

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

Ich habe das Hintergrundbild und das Element der linken Schaltfläche der Navigationsleiste angepasst, und der graue Titel passt nicht zum Hintergrund. Dann benutze ich:

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

um die Farbtonfarbe in grau zu ändern. Und der Titel ist jetzt weiß! Das ist, was ich will.

Hoffe auch zu helfen :)

Glänzend
quelle
Schön, aber das funktioniert nur, um den Text in Weiß zu ändern. Selbst wenn Sie die navBar mit [UIColor whiteColor] tönen, wird die Textfarbe in Weiß geändert.
Cschuff
6

Es wird empfohlen, self.title festzulegen, da dies verwendet wird, wenn untergeordnete Navigationsleisten verschoben oder Titel in Registerkarten angezeigt werden.

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

Dies ist ein ziemlich alter Thread, aber ich denke darüber nach, eine Antwort für die Einstellung von Farbe, Größe und vertikaler Position des Titels der Navigationsleiste für iOS 7 und höher zu geben

Für Farbe und Größe

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

Für vertikale Position

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

Legen Sie den Titel fest und weisen Sie das Attributwörterbuch zu

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

Das funktioniert bei mir in Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
zumzum
quelle
Ziemlich nah dran, aber die Sache ist, dass Ihr Weg alle möglichen Attribute überschreibt, die bereits im Titel enthalten sind. In meinem Fall war das die Schriftart. Der Code, mit dem ich endete, warnavigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
Matic Oblak
Funktioniert gut. Das gleiche gilt für Obj-C:self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Mike Keskinov
5

Swift 4 & 4.2 Version:

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

Um die Schriftgröße des Titels festzulegen, habe ich folgende Bedingungen verwendet. Vielleicht hilfreich für jeden

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
quelle
3

Ein Update des Beitrags von Alex RR unter Verwendung der neuen iOS 7-Textattribute und des modernen Ziels c für weniger Lärm:

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
quelle
3

Ich glaube, der richtige Weg, um die Farbe einzustellen, UINavigationBarist:

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

Der obige Code ist in Unterklasse geschrieben UINavigationBarund funktioniert offensichtlich auch ohne Unterklasse.

stringCode
quelle
Richtig, aber nur iOS 5. Seit der Veröffentlichung von iOS 5 ist es lange genug her, dass es eine gute Lösung ist. Und da wir uns in der iOS 5-Welt befinden, ist es erwähnenswert, dass man dort Titeltextattribute verwenden [UINavigationBar appearance]und festlegen kann (angesichts der Tricks, die mit Unterklassen verbunden sind UINavigationBar, eine bevorzugte Lösung).
Ivan Vučica
@stringCode. Können Sie den obigen Code ohne "self.navigationController.navigationBar.titleTextAttributes = attribute;" initialisieren?
Gajendra K Chauhan
3

Verwenden Sie diese Option zur Unterstützung der Orientierung

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.
quelle
2

Dies ist eines der Dinge, die fehlen. Am besten erstellen Sie Ihre eigene Navigationsleiste, fügen ein Textfeld hinzu und bearbeiten die Farbe auf diese Weise.

David McGraw
quelle
Ich folge deiner Idee :) Welche Methode sollte ich überschreiben, um mit dem Titel zu spielen? Entschuldigung, ich bin wirklich ein n00b :(
Sr.Richie
2

Nachdem das gleiche Problem (wie bei anderen) des Etiketts aufgetreten ist, das sich beim Einfügen einer Schaltfläche in die Navigationsleiste bewegt (in meinem Fall habe ich einen Drehknopf, den ich beim Laden des Datums durch eine Schaltfläche ersetze), haben die oben genannten Lösungen nicht funktioniert Für mich hat also Folgendes funktioniert und das Label die ganze Zeit am selben Ort gehalten:

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

Sie sollten [label sizeToFit] aufrufen. Nach dem Festlegen des Texts, um seltsame Versätze zu vermeiden, wenn die Beschriftung automatisch in der Titelansicht neu positioniert wird, wenn andere Schaltflächen die Navigationsleiste belegen.

George
quelle
1

Kann diese Methode in der Appdelegate-Datei verwenden und in jeder Ansicht verwenden

+(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
quelle
1

titleTextAttributes Zeigt Attribute für den Titeltext der Leiste an.

@property (nichtatomar, kopiert) NSDictionary * titleTextAttributes Diskussion Sie können die Schriftart, die Textfarbe, die Textschattenfarbe und den Textschattenversatz für den Titel im Textattributwörterbuch mithilfe der in NSString UIKit Additions Reference beschriebenen Textattributschlüssel angeben.

Verfügbarkeit Verfügbar in iOS 5.0 und höher. In UINavigationBar.h deklariert

tauchen
quelle