цвет текста iPhone Панель навигации Название

голоса
272

Кажется, IOS панель навигации название белого цвета по умолчанию. Есть ли способ, чтобы изменить его на другой цвет?

Я отдаю себе отчет в navigationItem.titleViewподходе с использованием изображения. Так как мои навыки дизайна ограничены , и я не смог получить стандартный глянцевый, я предпочитаю изменить цвет текста.

Любое понимание будет высоко ценится.

Задан 01/03/2009 в 07:51
источник пользователем
На других языках...                            


32 ответов

голоса
410

Современный подход

Современный способ, в течение всего навигационного контроллера ... сделать это один раз, когда вид корня вашего навигационного контроллера загружается.

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

Однако, это не кажется, оказывают влияние на последующие взгляды.

Классический подход

Старый способ, на вид контроллера (эти константы для IOS 6, но если хотите сделать это на вид контроллера на IOS 7 внешний вид вы хотите, один и тот же подход, но с разными константами):

Вы должны использовать UILabelкак titleViewиз navigationItem.

Этикетка должна:

  • Иметь четкий цвет фона ( label.backgroundColor = [UIColor clearColor]).
  • Используйте жирный шрифт 20pt системы ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Есть тень черного цвета с 50% альфа ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Вы хотите установить выравнивание текста по центру , а также ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterдля старших SDKs).

Установите цвет текста этикетки быть любой другой цвет вы хотите. Вы действительно хотите цвет, который не вызывает текст, чтобы смешаться в тень, что было бы трудно читать.

Я работал на это путем проб и ошибок, но значения я придумал, в конечном счете слишком просто для них, чтобы не быть, что Apple, выбрал. :)

Если вы хотите , чтобы убедиться в этом, отказаться от этого кода в initWithNibName:bundle:ин PageThreeViewController.mиз образца NavBar компании Apple . Это заменит текст с желтой этикеткой. Это должно быть неотличимо от оригинала , полученного с помощью кода Apple, за исключением цвета.

- (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: Кроме того, прочитайте ответ Эрика Б ниже. Мой код показывает эффект, но его код предлагает более простой способ отказаться от этого на место на существующем контроллере представления.

Ответил 07/03/2009 в 03:30
источник пользователем

голоса
226

Я знаю, что это довольно старая нить, но я думаю, что было бы полезно знать, для новых пользователей, что IOS 5 приносит новое свойство для установления свойств названия.

Вы можете использовать UINavigationBar - х setTitleTextAttributesдля установки шрифта, цвета, смещением, и цвет тени.

Кроме того , вы можете установить один и тот же по умолчанию UINavigationBar Заглавный атрибуты текста для всех UINavigationBarsв вашем приложении.

Например вот так:

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

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
Ответил 26/10/2011 в 23:16
источник пользователем

голоса
180

В прошивке 5 вы можете изменить цвет заголовка Панели навигации в этой манере:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
Ответил 26/02/2012 в 17:31
источник пользователем

голоса
127

На основании ответа Стивена Фишера я написал этот кусок кода:

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

Преимущество этого кода, помимо работы с рамой должным образом, то, что если изменить название вашего контроллера пользовательского вид названия также будет обновляться. Нет необходимости обновлять его вручную.

Другим большим преимуществом является то, что это делает его очень просто включить пользовательский цвет заголовка. Все, что вам нужно сделать, это добавить этот метод к контроллеру.

Ответил 05/05/2011 в 14:52
источник пользователем

голоса
40

Большинство из перечисленных выше предложений являются устаревшими теперь, прошивка 7 использования -

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

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

Кроме того, проверка на NSAttributedString.h для различных свойств текста, которые могут быть установлены.

Ответил 03/10/2013 в 13:01
источник пользователем

голоса
38

В IOS 7 и 8, вы можете изменить цвет Title, чтобы, скажем, зеленый

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];
Ответил 19/12/2013 в 17:14
источник пользователем

голоса
20

Для того, чтобы оставить вопрос уточненный, я добавлю Alex RR решение, но в Swift :

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

Какие результаты для:

введите описание изображения здесь

Ответил 14/08/2015 в 13:48
источник пользователем

голоса
13

Метод 1 , установите его в IB:

введите описание изображения здесь

Способ 2 , одна строка кода:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()
Ответил 08/04/2016 в 13:45
источник пользователем

голоса
13

С прошивкой 5 года мы должны установить цвет текста заголовка и шрифт навигационной панели, используя titleTextAttribute словарь (предопределенный словарь в UInavigation контроллер ссылки класса).

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];
Ответил 11/09/2012 в 08:21
источник пользователем

голоса
13

Решение по tewha работает хорошо , если вы пытаетесь изменить цвет на странице, но я хочу , чтобы иметь возможность изменить цвет на каждой странице. Я сделал несколько небольших изменений , так что она будет работать для всех страниц наUINavigationController

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
Ответил 24/09/2010 в 03:56
источник пользователем

голоса
10

стриж Version

Я нашел большинство из вас, ребята представили ответы Objective_C версии

Я хотел бы реализовать эту функцию с помощью Swift для тех, кто нуждается в этом.

В ViewDidload

1.To сделать фон становится Панель навигации цвета (например, синий)

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

2.To сделать фон становится Панель навигации Изображение (например: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

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

Изменение 3.To Панель навигации в заголовке (например: [Шрифт: Futura, 10] [Цвет: Красный])

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

(Hint1: «!» Не забудьте знак после UIFont)

(Hint2: есть много атрибутов текста заголовка, командованию нажмите «NSFontAttributeName» вы можете войти в классе и вид наименования ключей и тип объектов, которые они необходимы)

Я надеюсь, что смогу помочь!: D

Ответил 09/10/2015 в 10:05
источник пользователем

голоса
10

Используйте код, приведенный ниже в любой вид контроллера viewDidLoad или метода 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.
}
Ответил 19/05/2014 в 07:43
источник пользователем

голоса
9

Короткий и сладкий.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
Ответил 08/12/2013 в 03:50
источник пользователем

голоса
8

Это мое решение, основанное на Stevens

Только реальная разница я ставлю некоторые обработки в течение отрегулировать положение, если в зависимости от длины текста, как представляется, подобно тому, как это сделать яблоко

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

Вы можете настроить значение 10 в зависимости от размера шрифта

Ответил 22/10/2010 в 15:28
источник пользователем

голоса
6

Это довольно старая нить, но я думаю о предоставлении ответа для настройки цвета, размера и вертикального положения навигационной панели Title для прошивки 7 и выше

Для цвета и размера

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

Для вертикальной установки

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

Установить название и назначить словарь атрибутов

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;
Ответил 04/06/2015 в 15:05
источник пользователем

голоса
6

Рекомендуется установить self.title как это используется, выдвигая ребенка NavBars или с указанием названия на 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];
    }
}
Ответил 24/05/2012 в 19:50
источник пользователем

голоса
6

Я настроить фоновое изображение в Панели навигации и левая кнопку элемент, а серое название не подходит фону. Затем я использую:

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

изменить оттенок цвета на серый. И название теперь белый! Это то, что я хочу.

Надежда также помочь :)

Ответил 27/05/2011 в 06:37
источник пользователем

голоса
6

Я столкнулся с проблемой с моими кнопками нав метание текст из центра (если у вас есть только одна кнопка). Чтобы исправить это, я просто изменил мой размер кадра следующим образом:

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
Ответил 21/01/2011 в 17:07
источник пользователем

голоса
4

Это работает для меня в Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
Ответил 13/04/2017 в 02:44
источник пользователем

голоса
4

Используйте как это для поддержки ориентации

    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];
Ответил 17/01/2011 в 06:28
источник пользователем

голоса
3

Обновление поста Alex RR, используя новую IOS 7 текстовых атрибуты и современные Objective C для меньшего шума:

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];
Ответил 29/11/2013 в 23:35
источник пользователем

голоса
3

установить размер шрифта заголовка я использовал следующие условия .. возможно полезно никому

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;
Ответил 15/09/2011 в 12:18
источник пользователем

голоса
2

Я считаю, правильный путь, чтобы установить цвет UINavigationBar является:

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

Код выше написано является подклассом на UINavigationBar, очевидно, работает без подклассов, а также.

Ответил 09/07/2012 в 23:04
источник пользователем

голоса
2

Столкнувшись с такой же проблемой (как другие) этикетки, которая движется, когда мы вставляем кнопку в панели навигации (в моем случае у меня есть счетчик, который я заменить с помощью кнопки, когда дата загружается), эти решения не работают для меня, так вот то, что работал и сохранил этикетку на том же месте все время:

- (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;
Ответил 14/04/2011 в 22:23
источник пользователем

голоса
2

Это одна из тех вещей, которые пропали без вести. Лучше всего, чтобы создать свою собственную панель навигации, добавить текстовое поле, и манипулировать цвет, который путь.

Ответил 01/03/2009 в 08:11
источник пользователем

голоса
1
 self.navigationItem.title=@"Extras";
    [self.navigationController.navigationBar setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21],
      NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
Ответил 30/10/2014 в 05:39
источник пользователем

голоса
1

titleTextAttributes Показать атрибуты для текста заголовка бара.

@property (неатомической, копия) NSDictionary * titleTextAttributes Обсуждение Вы можете указать шрифт, цвет текста, текст цвет тени, и текст смещение тени для заголовка в тексте словаря атрибутов, с помощью клавиш атрибутов текста, описанные в NSString UIKit Дополнения Reference.

Наличие Доступно в прошивкой 5.0 и более поздних версий. Объявлен в UINavigationBar.h

Ответил 07/10/2012 в 06:51
источник пользователем

голоса
1

Можно использовать этот метод в AppDelegate файл и может использовать в каждом виде

+(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;
}
Ответил 20/08/2012 в 11:47
источник пользователем

голоса
1

Вы должны позвонить [ярлык sizeToFit]; после установки текста, чтобы предотвратить странные смещения, когда метка автоматически приложена в окне заголовка, когда другие кнопки занимают панель навигации.

Ответил 16/03/2011 в 06:11
источник пользователем

голоса
0

Swift 4 версии:

self.navigationController.navigationBar.titleTextAttributes = [
        NSAttributedStringKey.foregroundColor: UIColor.green]
Ответил 23/06/2018 в 08:41
источник пользователем

голоса
0

Я использую ниже код для прошивки 9 и его работает нормально для меня. Я также использовать цвет тени для названия.

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

Может это поможет.

благодаря

Ответил 12/07/2016 в 06:40
источник пользователем

голоса
0

Для того, чтобы сделать большое решение Эрика Б более полезным по различному UIViewControllers вашего приложения я рекомендую добавить категорию UIViewController и объявить его SETTITLE: метод названия внутри. Как это вы получите изменение названия цвета на все контроллеры просмотра без необходимости дублирования.

Одна вещь, чтобы отметить, однако, что вам не нужно [супер SETTITLE: tilte]; в коде Эрика, и что вам нужно будет явно вызывать self.title = @ «мой новый заголовок» в контроллерах зрения для этого метода можно назвать

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

@конец

Ответил 31/12/2012 в 11:48
источник пользователем

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