web-dev-qa-db-fra.com

Modifier les propriétés de la police UINavigationBar?

J'ai un UINavigationBar ajouté à ma vue UIViewController. Je souhaite modifier les propriétés des polices. Notez que je veux changer un UINavigationBar pas un contrôleur. Dans mon application où j'utilise UINavigationController, j'utilise self.navigationItem.titleView = label; pour afficher l'étiquette personnalisée.

Comment puis-je accomplir pour avoir un titre personnalisé dans mon UINavigationBar?

P.S Je l'utilise pour définir le texte du titre self.navBar.topItem.title = @"Information"; de mon UINavigationBar.

42
Jacob

À partir d'iOS 5, nous devons définir la couleur du texte du titre et la police de la barre de navigation à l'aide du dictionnaire titleTextAttribute (dictionnaire prédéfini dans la référence de classe du contrôleur UInavigation).

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

Le tutoriel ci-dessous est le meilleur tutoriel pour la personnalisation des UIElements comme la barre UInavigation, le contrôle UIsegmented, UITabBar. Cela peut vous être utile

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

88
Sandeep

(Cela n'est pas possible en utilisant la nouvelle API d'apparence iOS 5.0).

Modifier:

iOS> = 5.0:

Définissez les attributs du texte du titre pour la barre de navigation:

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

UINavigationItem n'a pas de propriété appelée label ou quelque chose, seulement un titleView. Vous ne pouvez définir la police qu'en définissant une étiquette personnalisée comme vue de titre. Vous pouvez utiliser le code suivant: (comme suggéré ici )

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

Il suffit de mettre cela dans le délégué de votre application

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

De Ray Wenderlich:

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

Dans iOS8 Swift, utilisez le code suivant pour définir la police:

var navigationBarAppearance = UINavigationBar.appearance()
let font = UIFont(name: "Open Sans", size: 17)
if let font = font {
    navigationBarAppearance.titleTextAttributes = [NSFontAttributeName: font, NSForegroundColorAttributeName: UIColor.whiteColor()]
}
5

le lien ci-dessous vous aidera. Cela dépend de l'endroit où vous souhaitez définir les propriétés de police sur la barre de navigation de viewController actuelle partout dans l'application

vous pouvez trouver un tutoriel sympa ici% 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

L'idée de base est de créer une instance NSDictionary et de la remplir avec la police souhaitée et d'autres propriétés. J'ai fini avec cette solution:

dans votre méthode de contrôleur -viewDidLoad après [super viewDidLoad] mettez ces lignes:

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

N'oubliez pas d'ajouter la police à votre cible.

J'ai fait tout ce qui pouvait être fait sur une police et je n'ai pas pu la charger, alors qu'en fait la police n'était pas membre de ma cible.

Vérifiez donc l'adhésion cible également sur la police personnalisée ajoutée.

0
soryngod