iPhone Navigation Bar Tittel tekstfarge

stemmer
277

Det synes iOS Navigation Bar tittelen fargen er hvit som standard. Er det en måte å endre den til en annen farge?

Jeg er klar over navigationItem.titleViewtilnærming ved hjelp av et bilde. Siden mine design ferdigheter er begrenset, og jeg klarte ikke å få den standard blanke, foretrekker jeg å endre tekstfarge.

Noen innsikt ville være mye verdsatt.

Publisert på 01/03/2009 klokken 06:51
kilden bruker
På andre språk...                            


32 svar

stemmer
416

moderne tilnærming

Den moderne måten for hele navigeringskontrolleren ... gjøre dette en gang, når navigasjonskontrolleren rot syn er lastet.

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

Men dette betyr ikke synes ha en effekt i etterfølgende visninger.

Classic tilnærming

Den gamle måten, per view controller (disse konstantene er for iOS 6, men hvis ønsker å gjøre det per view kontrolleren på iOS 7 utseende du ønsker det samme tilnærming, men med forskjellige konstanter):

Du må bruke en UILabelsom titleViewav navigationItem.

Den bør etiketten:

  • Ha en klar bakgrunnsfarge ( label.backgroundColor = [UIColor clearColor]).
  • Bruk fet skrift 20 pkt system ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Ha en skygge av svart med 50% alfa ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Det er lurt å sette tekstjustering til sentrert også ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterfor eldre SDK).

Sett etikett tekstfarge for å være hva tilpasset fargen du ønsker. Du vil ha en farge som ikke forårsaker teksten å blande inn skygge, noe som ville være vanskelig å lese.

Jeg jobbet ut dette gjennom prøving og feiling, men verdiene jeg kom opp med er slutt for enkelt for dem å ikke være hva Apple plukket. :)

Hvis du ønsker å bekrefte dette, slipp denne koden inn initWithNibName:bundle:i PageThreeViewController.mav Apples NavBar prøve . Dette vil erstatte teksten med en gul etikett. Dette bør være umulig å skille fra den opprinnelige produsert av Apples kode, bortsett fra fargen.

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

Edit: Les også Erik B svar nedenfor. Koden min viser effekten, men kode tilbyr en enklere måte å slippe dette på plass på en eksisterende visning kontrolleren.

Svarte 07/03/2009 kl. 02:30
kilden bruker

stemmer
226

Jeg vet dette er en ganske gammel tråd, men jeg tror det ville være nyttig å vite for nye brukere som iOS 5 bringer en ny eiendom for å etablere tittel egenskaper.

Du kan bruke UINavigationBar er setTitleTextAttributesfor innstilling av skrifttype, farge, offset, og skygge farge.

I tillegg kan du sette samme standard UINavigationBar tittel tekstattributter for alle UINavigationBarsgjennom hele programmet.

For eksempel slik:

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

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
Svarte 26/10/2011 kl. 22:16
kilden bruker

stemmer
180

I iOS 5 kan du endre navigationBar tittelen farge på denne måten:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
Svarte 26/02/2012 kl. 16:31
kilden bruker

stemmer
127

Basert på Steven Fisher svar jeg skrev denne delen av koden:

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

Fordelen med denne koden, i tillegg arbeider med rammen på riktig måte, er at hvis du endrer tittelen på kontrolleren den egendefinerte tittelen visningen vil også bli oppdatert. Du trenger ikke å oppdatere den manuelt.

En annen stor fordel er at det gjør det veldig enkelt å aktivere egendefinert tittel farge. Alt du trenger å gjøre er å legge denne metoden til kontrolleren.

Svarte 05/05/2011 kl. 13:52
kilden bruker

stemmer
40

De fleste av de ovennevnte forslag er foreldet nå, for iOS 7 bruk -

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

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

Også kassa NSAttributedString.h for ulike tekstegenskaper som kan stilles inn.

Svarte 03/10/2013 kl. 12:01
kilden bruker

stemmer
38

I IOS 7 og 8, kan du endre tittel farge til la oss si grønn

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];
Svarte 19/12/2013 kl. 16:14
kilden bruker

stemmer
20

For å holde spørsmålet up-to-date, vil jeg legge Alex RR løsning, men i Swift :

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

Noe som resulterer til:

skriv bildebeskrivelse her

Svarte 14/08/2015 kl. 13:48
kilden bruker

stemmer
13

Metode 1 , sett den i IB:

skriv bildebeskrivelse her

Metode 2 , en linje med kode:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()
Svarte 08/04/2016 kl. 13:45
kilden bruker

stemmer
13

Fra iOS 5 og utover har vi å sette titteltekstfarge og skrift på navigasjonslinjen ved hjelp titleTextAttribute Dictionary (predefinert ordbok i UInavigation kontrolleren klassen referanse).

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];
Svarte 11/09/2012 kl. 07:21
kilden bruker

stemmer
13

Løsningen av tewha fungerer bra hvis du prøver å endre fargen på en side, men jeg ønsker å være i stand til å endre fargen på hver side. Jeg har gjort noen små endringer, slik at det ville fungere for alle sider på enUINavigationController

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
Svarte 24/09/2010 kl. 02:56
kilden bruker

stemmer
10

Swift versjon

Jeg fant de fleste av dere presenteres svarene på Objective_C versjon

Jeg ønsker å implementere denne funksjonen ved å bruke Swift for alle som trenger det.

i viewDidLoad

1.To gjøre NavigationBar bakgrunn blir farge (for eksempel: BLUE)

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

2.To gjøre NavigationBar bakgrunn blir bilde (for eksempel: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

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

3.To endring NavigationBar tittel (for eksempel: [Font: Futura, 10] [Farge: rød])

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

(Hint1: "" ikke glem merket etter UIFont)

(Hint2: det er mange attributter av tittelteksten, kommando klikk på "NSFontAttributeName" kan du gå inn i klassen og vise keyNames og objektene typene de nødvendige)

Jeg håper jeg kan hjelpe: D

Svarte 09/10/2015 kl. 10:05
kilden bruker

stemmer
10

Bruk koden nedenfor i en visning controller viewDidLoad eller viewWillAppear metode.

- (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.
}
Svarte 19/05/2014 kl. 06:43
kilden bruker

stemmer
9

Kort og godt.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
Svarte 08/12/2013 kl. 02:50
kilden bruker

stemmer
8

Dette er min løsning basert på Stevens

Eneste virkelige forskjellen er at jeg satt noen håndtering i for justere posisjonen dersom avhengig av tekstlengde, synes å være lik hvordan Apple gjør det

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

Det kan være lurt å justere 10 verdi avhengig av skriftstørrelsen

Svarte 22/10/2010 kl. 14:28
kilden bruker

stemmer
6

Dette er en ganske gammel tråd, men jeg tenker på å gi svar for å sette farge, størrelse og vertikal posisjon av Navigation Bar Tittel for iOS 7 og nyere

For farge og størrelse

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

For vertikal posisjon

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

Sett Tittel og tilordne attributter ordboken

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;
Svarte 04/06/2015 kl. 15:05
kilden bruker

stemmer
6

Det anbefales å sette self.title da dette brukes mens du presser barnet navbars eller vise tittel på 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];
    }
}
Svarte 24/05/2012 kl. 18:50
kilden bruker

stemmer
6

Jeg har tilpasset navigationBar bakgrunnsbilde og venstre knapp element, og den grå tittelen passer ikke bakgrunnen. Da bruker jeg:

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

å endre fargetone farge til grått. Og tittelen er hvitt nå! Det er det jeg vil ha.

Håper å hjelpe også :)

Svarte 27/05/2011 kl. 05:37
kilden bruker

stemmer
6

Jeg løp inn i problemet med mine nav knapper kaste teksten ut av sentrum (når du bare har én knapp). For å fikse det jeg nettopp endret min rammestørrelse slik:

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
Svarte 21/01/2011 kl. 16:07
kilden bruker

stemmer
5

Dette fungerer for meg i Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
Svarte 13/04/2017 kl. 02:44
kilden bruker

stemmer
4

Bruk som dette for Orientering støtte

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];
Svarte 17/01/2011 kl. 05:28
kilden bruker

stemmer
3

En oppdatering til Alex RR innlegg med de nye iOS 7 tekstattributter og moderne Objective C for mindre støy:

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];
Svarte 29/11/2013 kl. 22:35
kilden bruker

stemmer
3

for å angi skriftstørrelsen av tittel jeg har anvendt følgende betingelser .. kanskje hjelpsom til noen

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;
Svarte 15/09/2011 kl. 11:18
kilden bruker

stemmer
2

Jeg tror riktig måte å sette farge på UINavigationBarer:

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

Koden ovenfor er skrevet er underklasse på UINavigationBar, tydeligvis fungerer uten subclassing også.

Svarte 09/07/2012 kl. 22:04
kilden bruker

stemmer
2

Etter opplever det samme problemet (som andre) av etiketten som beveger seg når vi setter inn en knapp i navbar (i mitt tilfelle har jeg en spinner som jeg erstatte med en knapp når datoen er lastet), gjorde løsningene ovenfor ikke fungerer for meg, så her er hva som fungerte og holdt etiketten på samme sted hele tiden:

- (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;
Svarte 14/04/2011 kl. 21:23
kilden bruker

stemmer
2

Dette er en av de tingene som mangler. Det beste alternativet er å lage dine egne Navigation Bar, legge til en tekstboks, og manipulere fargen på den måten.

Svarte 01/03/2009 kl. 07:11
kilden bruker

stemmer
1
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
Svarte 30/10/2014 kl. 05:39
kilden bruker

stemmer
1

titleTextAttributes visningsegenskaper for barens tittelteksten.

@property (nonatomic, kopi) NSDictionary * titleTextAttributes Diskusjon Du kan angi font, tekstfarge, tekstskygge farge, og tekstskygge oppveie for tittelen i tekstattributter ordbok, ved hjelp av tekstattributt tastene beskrevet i NSString UIKit Tilgang Reference.

Tilgjengelighet Tilgjengelig i iOS 5.0 og nyere. Erklært I UINavigationBar.h

Svarte 07/10/2012 kl. 05:51
kilden bruker

stemmer
1

Kan bruke denne metoden i appdelegate fil og kan bruke på hver visning

+(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;
}
Svarte 20/08/2012 kl. 10:47
kilden bruker

stemmer
1

Du bør ringe [etiketten sizeToFit]; etter innstilling av teksten for å hindre fremmede forskyvninger når etiketten automatisk omplasseres i tittelen visning når andre knapper okkupere nav bar.

Svarte 16/03/2011 kl. 05:11
kilden bruker

stemmer
0

Swift 4 versjon:

self.navigationController.navigationBar.titleTextAttributes = [
        NSAttributedStringKey.foregroundColor: UIColor.green]
Svarte 23/06/2018 kl. 08:41
kilden bruker

stemmer
0

Jeg bruker under koden for iOS 9 og dens arbeider fin for meg. Jeg har også bruke skygge farge for tittelen.

self.navigationItem.title = @"MY NAV TITLE";
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
self.navigationController.navigationBar.translucent = NO;
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
shadow.shadowOffset = CGSizeMake(0, 1);
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,
                                                       shadow, NSShadowAttributeName,
                                                       [UIFont fontWithName:@"HelveticaNeue-Light" size:21.0], NSFontAttributeName, nil]];

Kan dette hjelpe deg.

Takk

Svarte 12/07/2016 kl. 06:40
kilden bruker

stemmer
0

For å gjøre Erik B flott løsning mer brukbar på tvers av ulike UIVIewCOntrollers av din app jeg anbefaler å legge en kategori for UIViewController og erklære sin setTitle: tittel metode inne. Som dette vil du få tittelen fargeendring på alle vis kontrollere uten behov for duplisering.

En ting å merke seg om er at du ikke trenger [super setTItle: tilte]; i Erik kode og at du må eksplisitt ringe self.title = @ "min nye tittelen" i visnings kontrollere for denne metoden for å bli kalt

@implementation UIViewController (CustomeTitleColor)

- (void)setTitle:(NSString *)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 blueColor]; // Change to desired color

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

@slutt

Svarte 31/12/2012 kl. 10:48
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more