2010-10-30 181 views

回答

14

標題視圖可以是任何圖。因此,只需創建一個UILabel或更改字體並將該新視圖分配給導航項目的title屬性的其他內容。

+0

這是一個偉大的想法,但我現在有一個問題,.. 當我加我的UILabel我對UINavigationController的控件(如Add按鈕)不再可見,.. * HM * – 2010-10-30 18:11:14

+0

我固定它,用自己..對不起一個missunderstood;) – 2010-10-30 18:18:15

+1

如果這解決了問題,不要忘記接受的答案 – Erik 2010-10-31 17:15:19

10

一個例子:

-(void) viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    CGRect frame = CGRectMake(0, 0, 400, 44); 
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [FontHelper fontFor:FontTargetForNavigationHeadings]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.textColor = [UIColor whiteColor]; 
    label.text = self.navigationItem.title; 
    // emboss in the same way as the native title 
    [label setShadowColor:[UIColor darkGrayColor]]; 
    [label setShadowOffset:CGSizeMake(0, -0.5)]; 
    self.navigationItem.titleView = label; 
} 
+0

+1此提供的解決方案。如果在堆棧viewControllers需要不同的字體的標題,然後'[UINavigationBar的外觀]'不能做的工作。自定義titleView是唯一的方法。 – BabyPanda 2012-10-19 04:15:19

+4

它更好地把這段代碼放在viewDidLoad中,否則每次查看都會在層次結構中出現,titleView將會被創建並且它在系統上不必要的工作 – raw3d 2013-10-06 13:30:54

71

作爲iOS 5中的可以經由代理外觀改變字體。

https://developer.apple.com/documentation/uikit/uiappearance

下面我們來設置所有UINavigationControllers標題字體。

NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]]; 
    [titleBarAttributes setValue:[UIFont fontWithName:@"Didot" size:16] forKey:NSFontAttributeName]; 
    [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes]; 

要設置後退按鈕的字體,這樣做:

NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithDictionary: [[UIBarButtonItem appearance] titleTextAttributesForState:UIControlStateNormal]]; 
    [attributes setValue:[UIFont fontWithName:@"Didot" size:12] forKey:NSFontAttributeName]; 
    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
+4

iOS 7棄用了鍵值:UITextAttributeFont(讀取,不用這個)現在使用鍵:NSFontAttributeName來代替。工程奇蹟,使我的應用程序看起來好多了。謝謝! – 2013-10-03 16:30:04

+1

在每個單獨的視圖控制器中,您還可以在當前導航欄的實例上設置標題文本屬性以自定義其外觀,如下面的代碼片段所示:[self.navigationController.navigationBar setTitleTextAttributes:@ {NSFontAttributeName:[UIFont fontWithName:@「帕拉提諾-粗體」尺寸:28],NSForegroundColorAttributeName:的UIColor whiteColor]}]; – CodePlumber 2015-03-21 16:53:23

18

爲iOS8上的+,你可以使用:

[self.navigationController.navigationBar setTitleTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"MyFont" size:18.0f], 
                    NSForegroundColorAttributeName: [UIColor whiteColor] 
                    }]; 
+3

感謝這給了我正確的方向來實現自定義字體與swift:self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName:UIFont(名稱:「MyFont」,大小:18.0)!] – NBoymanns 2016-03-15 08:10:43

+0

謝謝,隊友!解決了它。 – Felipe 2016-04-14 17:58:14

+2

總是傷心嘗試首先上面的答案時,只是找出一個底部是最現代的一個\: – hashier 2016-11-30 12:29:29

1

從@morgancodes答案將設置所有的字體UINavigationController標題。我已經更新了它的雨燕4:

let attributes = [NSAttributedStringKey.font: UIFont(name: "Menlo", size: 14) as Any] 
UINavigationBar.appearance().titleTextAttributes = attributes 
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, for: .normal)