Изменить свойства шрифта UINavigationBar? - PullRequest
42 голосов
/ 08 января 2012

У меня есть UINavigationBar, добавленный к моему представлению UIViewController. Я хочу изменить свойства шрифтов. Обратите внимание, что я хочу изменить UINavigationBar, а не контроллер. В моем приложении, где я использую UINavigationController, я использую self.navigationItem.titleView = label; для отображения пользовательской метки.

Как мне добиться того, чтобы в моем UINavigationBar был пользовательский заголовок?

P.S Я использую это, чтобы установить текст заголовка self.navBar.topItem.title = @"Information"; моего UINavigationBar.

Ответы [ 6 ]

88 голосов
/ 11 сентября 2012

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

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

Приведенный ниже учебник является лучшим учебником для настройки элементов UIE, таких как панель UInavigation, элемент управления UIsegmented, UITabBar. Это может быть полезно для вас

http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

21 голосов
/ 21 января 2012

(Это невозможно при использовании нового API iOS 5.0 Appearance).

Edit:

iOS> = 5.0:

Установить текстовые атрибуты заголовка для панели навигации:

// Customize the title text for *all* UINavigationBars
NSDictionary *settings = @{
    UITextAttributeFont                 :  [UIFont fontWithName:@"YOURFONTNAME" size:20.0],
    UITextAttributeTextColor            :  [UIColor whiteColor],
    UITextAttributeTextShadowColor      :  [UIColor clearColor],
    UITextAttributeTextShadowOffset     :  [NSValue valueWithUIOffset:UIOffsetZero]};

[[UINavigationBar appearance] setTitleTextAttributes:settings];

iOS <5.0 </p>

UINavigationItem не имеет свойства с именем label или чего-то другого, только titleView. Вы можете только установить шрифт, установив пользовательскую метку в качестве этого вида заголовка Вы можете использовать следующий код: (как предложено здесь )

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 44)];
label.font = [UIFont fontWithName:@"YOURFONTNAME" size:20.0];
label.shadowColor = [UIColor clearColor];
label.textColor =[UIColor whiteColor];
label.text = self.title;  
self.navigationItem.titleView = label;      
[label release];
7 голосов
/ 24 июня 2012

Просто поместите это в делегат вашего приложения

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

От Рэя Вендерлиха:

http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0], 
UITextAttributeTextColor, 
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], 
UITextAttributeTextShadowColor, 
[NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
UITextAttributeTextShadowOffset, 
[UIFont fontWithName:@"STHeitiSC-Light" size:0.0], 
UITextAttributeFont, nil]];
4 голосов
/ 23 марта 2015

В iOS8 swift используйте следующий код для установки шрифта:

var navigationBarAppearance = UINavigationBar.appearance()
let font = UIFont(name: "Open Sans", size: 17)
if let font = font {
    navigationBarAppearance.titleTextAttributes = [NSFontAttributeName: font, NSForegroundColorAttributeName: UIColor.whiteColor()]
}
1 голос
/ 21 мая 2014

ссылка ниже поможет вам.Это зависит от того, где вы хотите установить свойства шрифта на панели навигации текущего viewController, где угодно в приложении

. Вы можете найти хороший учебник здесь% http://www.appcoda.com/customize-navigation-status-bar-ios-7/?utm_campaign=iOS_Dev_Weekly_Issue_118&utm_medium=email&utm_source=iOS%2BDev%2BWeekly

Основная идея - создать экземпляр NSDictionaryи заполните его желаемым шрифтом и другими свойствами.Я закончил с этим решением:

в вашем методе контроллера -viewDidLoad после того, как [super viewDidLoad] поместил эти строки:

UIColor *color = [UIColor redColor];
NSShadow *shadow = [NSShadow new];
UIFont *font = [UIFont fontWithName:@"EnterYourFontName" size:20.0]
shadow.shadowColor = [UIColor greenColor];
shadow.shadowBlurRadius = 2;
shadow.shadowOffset = CGSizeMake(1.0f, 1.0f);

//fill this dictionary with text attributes
NSMutableDictionary *topBarTextAttributes = [NSMutableDictionary new];
    //ios 7
topBarTextAttributes[NSForegroundColorAttributeName] = color;
    //ios 6
topBarTextAttributes[UITextAttributeTextColor] = color;
    //ios 6
topBarTextAttributes[UITextAttributeTextShadowOffset] = [NSValue valueWithCGSize:shadow.shadowOffset];
topBarTextAttributes[UITextAttributeTextShadowColor] = shadow.shadowColor;
    //ios 7
topBarTextAttributes[NSShadowAttributeName] = shadow;
    //ios 6
topBarTextAttributes[UITextAttributeFont]   = font;
    //ios 7
topBarTextAttributes[NSFontAttributeName]   = font;

//for all the controllers uncomment this line
//    [[UINavigationBar appearance]setTitleTextAttributes:topBarTextAttributes];

//for current controller uncoment this line
//    self.navigationController.navigationBar.titleTextAttributes = topBarTextAttributes;
0 голосов
/ 30 января 2014

Не забудьте добавить шрифт к своей цели.

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

Так что проверьте целевое членство также на добавленный пользовательский шрифт.

...