2012-01-08 12 views
41

Mam UINavigationBar dodane do mojego widoku UIViewController. Chcę zmienić właściwości czcionek. Zauważ, że chcę zmienić UINavigationBar, a nie kontroler. W mojej aplikacji, w której używam UINavigationController, używam self.navigationItem.titleView = label; do wyświetlania niestandardowej etykiety.Zmiana właściwości czcionki UINavigationBar?

Jak mogę uzyskać niestandardowy tytuł w moim UINavigationBar?

P.S Używam tego, aby ustawić tekst tytułu self.navBar.topItem.title = @"Information"; mojego paska UINavigationBar.

Odpowiedz

86

Od iOS 5 należy ustawić kolor tekstu tytułu i czcionkę paska nawigacyjnego przy użyciu Słownik titleTextAttribute (predefiniowany słownik w klasie odniesienia kontrolera UInavigation).

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

Poniższy poradnik jest najlepszy poradnik dla dostosowywania UIElements jak bar UInavigation, UIsegmented kontrolę UITabBar. Może to być pomocne dla Ciebie

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

+2

@rolandjitsu po prostu musisz użyć NSFontAttributeName zamiast UITextAttributeFont. – CedricSoubrie

+1

@CedricSoubrie ~ tak, to prawda, chciałem tylko poinformować o tym autora, abyśmy mogli otrzymać zaktualizowaną odpowiedź :) – Roland

+3

A UITextAttributeTextColor należy zastąpić NSForegroundColorAttributeName – bobmoff

21

(Nie jest to możliwe przy użyciu nowego interfejsu API systemu iOS 5.0 Appearance).

Edit:

iOS> = 5,0:

ustawić tytuł Tekst Atrybuty dla Navigationbar:

// 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 nie ma właściwość o nazwie etykieta lub coś, tylko tytułViewView. Jesteś tylko w stanie ustawić czcionkę poprzez ustawienie niestandardowej etykiety, jak ten tytuł widoku można użyć następującego kodu: (jak sugerował here)

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

Rzeczywiście, dziękuję za komentarz. Nie mogłem go znaleźć w tym czasie. – Tieme

+0

DZIĘKUJEMY TAK DUŻO :) – Abo3atef

7

Wystarczy umieścić to w aplikacji delegata

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

Od 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]]; 
+0

Nie ustawiaj rozmiaru 0 na czcionkę, która spowoduje błędy wizualne po naciśnięciu do kontrolera widoku. Najpierw po naciśnięciu czcionka będzie miała rozmiar 0, a następnie odpowiednio się dopasuje, ale nadal jest widoczna - i denerwująca. Ustaw na 18.0 –

0

Nie zapomnij dodać czcionkę do celu.

Zrobiłem wszystko, co można zrobić z czcionką i nie mogłem go załadować, gdy w rzeczywistości czcionka nie była elementem mojego celu.

Więc sprawdź także członkostwo docelowe w dodanej czcionce niestandardowej.

1

poniższy link pomoże. To zależy od tego, gdzie chcesz ustawić właściwości czcionki na bieżących viewController na pasku nawigacyjnym wszystko w dowolnym miejscu aplikacji

można znaleźć ładny samouczek tutaj% 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

Podstawowym założeniem jest stworzenie NSDictionary instancji i wypełnić go z żądana czcionka i inne właściwości. skończyłem z tego rozwiązania:

w metodzie kontrolera -viewDidLoad po [Super viewDidLoad] umieścić to linie:

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

W systemów iOS 8 szybkich, należy użyć następującego kodu, aby ustawić czcionkę:

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