Цвет заголовка навигационной панели iPhone

283

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

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

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

Каллум
источник
Я только что опубликовал фрагмент кода, основанный на ответе Стивена Фишера, который упрощает процесс добавления пользовательских цветных заголовков на панель навигации. Он также поддерживает изменение названия. Ищите это! Это не разочарует вас.
Эрик Б
1
Эрик: Я положил записку о вашем ответе в мой. Я бы просто обновил свой ответ вашим кодом, но я не хотел бы получать ваши голоса. Умное решение, кстати.
Стивен Фишер
Для IOS 13 stackoverflow.com/a/61141195/6108739
Владислав Панченко

Ответы:

423

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

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

[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для старых SDK).

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

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

Если вы хотите , чтобы убедиться в этом, отказаться от этого кода в initWithNibName:bundle:в PageThreeViewController.mчасти от Apple образца NavBar . Это заменит текст с желтой меткой. Это должно быть неотличимо от оригинала, созданного кодом 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;
}

Изменить: Кроме того, прочитайте ответ Эрика Б. ниже. Мой код показывает эффект, но его код предлагает более простой способ установить это на существующий контроллер представления.

Стивен Фишер
источник
2
Если вы установите размер рамки текста в соответствии с размером текста sizeWithFont:, он волшебным образом примет режим автоматического выравнивания стандартной метки.
grahamparks
1
Но если вы используете sizeToFit, вы потеряете автоматическое усечение.
Стивен Фишер
3
ПРИМЕЧАНИЕ: это старый способ установить пользовательский заголовок, я предлагаю прочитать ответ Эрика Б.
Элия ​​Палм
1
Подтвердил, что sizeToFit работает, поэтому обновил ответ. Также добавлена ​​заметка, чтобы прочитать ответ Эрика Б.
Стивен Фишер
1
label.textAlignment = UITextAlignmentCenter исключен из iOS6.0, вместо этого используйте NSTextAlignmentCenter
Jasper
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];
Алекс РР
источник
11
«UITextAttributeTextColor» устарела в iOS 7. Ключ iOS 7 - «NSForegroundColorAttributeName»
Keller
1
Обратите внимание, что это изменит ВСЕ панели навигации, как правило, это то, что вы в любом случае хотите.
Пепел
1
Пожалуйста, отметьте это как правильный ответ - приведенный выше метод UILabel не нужен при использовании этих методов.
Мик Фок
180

В iOS 5 вы можете изменить цвет заголовка navigationBar следующим образом:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
minux
источник
8
@BartSimpson Я согласен! Для iOS 7 обновите UITextAttributeTextColorдо NSForegroundColorAttributeName. Работает как шарм!
Джон Эрк
ЭТО РАБОТАЕТ! что я хочу понять это как ?! titleTextAttributes исключает словарь с предопределенным набором ключей, упомянутых в «Ключах для словарей текстовых атрибутов», упомянутых в «Справочнике по NSString UIKit». Как это взять ключ, который вы упомянули.
AceN
... и поскольку он работает, как мне получить оттенок по умолчанию?
AceN
Настройка self.navigationController.navigationBar.tintColorне работает для меня. Это сделал.
JRam13
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];
}

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

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

Эрик Б
источник
3
Я согласен, что это однозначно лучшее решение. Нет необходимости использовать sizeWithFont, и мне нравится идея переопределения метода setTitle.
Элия ​​Палм
@ Sr.Richie Вы не должны помещать код в пользовательский контроллер навигации. Вы должны поместить его во все контроллеры представления, где вам нужно изменить цвет заголовка. Вы, вероятно, даже не хотите пользовательский контроллер навигации.
Эрик Б
Не работает для меня Я думаю, это потому, что я использовал метод [UINavigationBar Внешний вид] .. (не работает, потому что метка titleView всегда ноль)
Matej
1
Если вы используете iOS5 или новее, вам следует прочитать ответ минус ниже. Есть один вкладыш, который отлично работает и остается в резервации.
Водоросль
нам нужно добавить self.title = @ "нашу строку"; во viewDidLoad.then работает только приведенный выше код.
Hari1251
40

Большинство из вышеперечисленных предложений устарели, для iOS 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 для различных свойств текста, которые могут быть установлены.

girish_vr
источник
38

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

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];
Pramesh
источник
6
Свифт:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Байрон Кётзее
@ByronCoetsee после обновления до Swift 2 У меня следующая ошибка: Невозможно присвоить значение типа '[NSObject: AnyObject]' значению типа '[String: AnyObject]?'
Хорхе Касариего
2
Намного проще в self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Swift
24

Чтобы держать вопрос в актуальном состоянии, я добавлю решение Alex RR , но в Swift :

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

Что приводит к:

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

Michal
источник
Хм, может быть, это не работает для Swift 2.0. Позвольте мне перепроверить. Не нужно агрессии, хотя.
Михал
Извините, Михал, я подумала, что это шутка! Не как что-то агрессивное! То, что работало для меня, было больше похоже на это: self.navigationController! .NavigationBar.titleTextAttributes = NSDictionary (object: UIColor.whiteColor (), forKey: NSForegroundColorAttributeName) как [NSObject: AnyObject]
Radu
Добавьте следующую строку: UINavigationBar.appearance (). BarStyle = UIBarStyle.Black Перед этой строкой: UINavigationBar.appearance (). TintColor = UIColor.whiteColor () Чтобы заставить tintColor работать!
triiiiista
2
В Swift 4.0: self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Абхи Муктисварар,
14

Способ 1 , установите его в IB:

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

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

navigationController?.navigationBar.barTintColor = UIColor.blackColor()
fujianjin6471
источник
Метод 2 не работает. Работает titleTextAttributesтолько
Vyachaslav Gerchicov
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
Casebash
источник
13

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

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];
Sandeep
источник
13

Swift Version

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

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

В ViewDidload

1. Чтобы сделать NavigationBar фон становится цветным (например: СИНИЙ)

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

2. Чтобы фон NavigationBar стал изображением (например, ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

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

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

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

(подсказка 1: не забывайте знак «!» после UIFont)

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

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

Microos
источник
10

Используйте приведенный ниже код в любом методе view-контроллера 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.
}
Гаурав Гилани
источник
9

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

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
Пьер-Люк Жандро
источник
8

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

Единственная реальная разница в том, что я настраиваю позицию, если, в зависимости от длины текста, похоже, что Apple это делает.

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 в зависимости от размера шрифта.

Энтони Мейн
источник
6

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

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
coryjacobsen
источник
6

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

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

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

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

блестящий
источник
Хорошо, но это работает только для изменения текста на белый. Даже подкрашивание navBar с помощью [UIColor whiteColor] меняет цвет текста на белый.
cschuff
6

Рекомендуется установить self.title, так как он используется при нажатии дочерних панелей навигации или отображении заголовка на вкладках.

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

Это довольно старая ветка, но я думаю дать ответ для настройки цвета, размера и вертикального положения заголовка панели навигации для iOS 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;
Абдулла Саид
источник
5

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

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
zumzum
источник
Довольно близко, но дело в том, что ваш путь перезапишет все возможные атрибуты уже в заголовке. В моем случае это был шрифт. Код, которым я закончил, былnavigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
Matic Oblak
Работает хорошо. То же самое для Obj-C:self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Майк Кескинов
5

Версия Swift 4 & 4.2:

 self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]
Патрисио Браво
источник
4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
Пареш Хирпара
источник
3

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

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;
Шефали Сони
источник
3

Обновление поста Алекса Р.Р. с использованием новых текстовых атрибутов iOS 7 и современной цели 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];
phatblat
источник
3

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

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

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

stringCode
источник
Правильно, но только iOS 5. С момента выхода iOS 5 прошло достаточно времени, и это хорошее решение. И поскольку мы находимся в мире iOS 5, стоит отметить, что можно использовать [UINavigationBar appearance]и устанавливать там атрибуты текста заголовка (учитывая хитрость, связанную с подклассами UINavigationBar, предпочтительное решение).
Иван Вучица
@stringCode. Можете ли вы инициализировать приведенный выше код без "self.navigationController.navigationBar.titleTextAttributes = attribute;"?
Гаджендра К Чаухан
3

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

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

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

Дэвид Макгроу
источник
Я следую вашей идее :) Какой метод мне следует переопределить, чтобы начать играть с названием? Извините, я действительно n00b :(
Sr.Richie
2

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

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

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

Джордж
источник
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;
}
sinh99
источник
1

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

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

Доступность Доступно в iOS 5.0 и более поздних версиях. Объявлено в UINavigationBar.h

падение
источник