iOS เปลี่ยนแบบอักษรและสีของแถบการนำทาง


101

ดังนั้นฉันจึงมีรหัสนี้ที่ควรเปลี่ยนแบบอักษรหัวเรื่องของแถบนำทาง แต่มันทำได้ดีที่สุด

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
                                                                       fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
                            [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

การเปลี่ยนแบบอักษรของปุ่มย้อนกลับด้วยรหัสนี้ใช้ได้ดี

   //set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
                                  nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
                                            forState:UIControlStateNormal];

คำตอบ:


251

วิธีที่ถูกต้องในการเปลี่ยนฟอนต์ชื่อเรื่อง (และสี) คือ:

[self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];

แก้ไข: Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
 NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]

แก้ไข: Swift 4

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedStringKey.foregroundColor: UIColor.red,
 NSAttributedStringKey.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Swift 3:

self.navigationController?.navigationBar.titleTextAttributes = 
[NSForegroundColorAttributeName: UIColor.redColor(),
 NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]

2
ขนาดจะยังคงเท่าเดิมโดยไม่คำนึงถึงค่าที่ฉันลอง
Raphael Royer-Rivard

1
ใช่ฉันรู้ว่าแบบอักษรของฉันโหลดไม่ถูกต้อง ยังคิดไม่ออกว่าทำไมฉันจึงนำเข้า OpenSans-Light และ OpenSans-Regular ด้วยวิธีเดียวกันมีเพียง OpenSans-Light เท่านั้นที่ใช้งานได้ ...
Raphael Royer-Rivard

1
รหัส Obj-C ไม่มีวงเล็บปิด ควรเป็น: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-regular" size: 21]}];
Dylan Hand

ไปที่ลิงค์สำหรับเปลี่ยนแบบอักษร backBarButton: stackoverflow.com/a/16538596/5967144
soorej babu

แล้วเมื่อใช้ LargeTitle NavBar ล่ะ? ฉันไม่พบสิ่งใดnavigationBar.LargeTitleTextAttributesหรือสิ่งใดที่เกี่ยวกับความเคารพนั้น คุณรู้วิธีตั้งค่าแบบอักษร LargeTitle ทั่วโลกหรือไม่?
iKK

54

ไม่มีอะไรผิดปกติกับคำตอบอื่น ๆ ฉันแค่แชร์เวอร์ชันสตอรี่บอร์ดสำหรับการตั้งค่าแบบอักษร

1. เลือกแถบนำทางของคุณภายในตัวควบคุมการนำทางของคุณ

navbar

2. เปลี่ยนแบบอักษรชื่อเรื่องในตัวตรวจสอบคุณสมบัติ

ชื่อเรื่องแบบอักษร

(คุณอาจต้องสลับ Bar Tint สำหรับ Navigation Bar ก่อนที่ Xcode จะหยิบแบบอักษรใหม่)

หมายเหตุ (Caveats)

ตรวจสอบแล้วว่าสิ่งนี้ใช้ได้กับ Xcode 7.1.1+ ( ดูตัวอย่างด้านล่าง )

  1. คุณต้องสลับสีแถบนำทางก่อนที่แบบอักษรจะมีผล (ดูเหมือนว่าจะมีข้อบกพร่องใน Xcode คุณสามารถเปลี่ยนกลับเป็นค่าเริ่มต้นและแบบอักษรจะติด)
  2. หากคุณเลือกแบบอักษรของระบบ ~ ตรวจสอบให้แน่ใจว่าขนาดไม่ใช่ 0.0 (มิฉะนั้นแบบอักษรใหม่จะถูกละเว้น)

ขนาด

  1. ดูเหมือนว่าจะใช้งานได้โดยไม่มีปัญหาเมื่อ NavBar เพียงอันเดียวอยู่ในลำดับชั้นของมุมมอง ดูเหมือนว่า NavBars รองในสแต็กเดียวกันจะถูกละเว้น (โปรดทราบว่าหากคุณแสดง navBar ของตัวควบคุมการนำทางหลักการตั้งค่า navBar แบบกำหนดเองอื่น ๆ ทั้งหมดจะถูกละเว้น)

Gotchas (deux)

บางส่วนมีการทำซ้ำซึ่งหมายความว่ามีแนวโน้มที่จะสังเกตเห็นได้มาก

  1. บางครั้ง xml สตอรี่บอร์ดเสียหาย สิ่งนี้ต้องการให้คุณตรวจสอบโครงสร้างใน Storyboard เป็นโหมด Source Code (คลิกขวาที่ไฟล์ storyboard> Open As ... )
  2. ในบางกรณีแท็ก navigationItem ที่เชื่อมโยงกับแอ็ตทริบิวต์รันไทม์ที่ผู้ใช้กำหนดเองถูกตั้งค่าเป็นลูก xml ของแท็กมุมมองแทนแท็กตัวควบคุมมุมมอง หากเป็นเช่นนั้นให้ลบออกจากระหว่างแท็กเพื่อการทำงานที่เหมาะสม
  3. สลับสี NavBar เพื่อให้แน่ใจว่าใช้แบบอักษรที่กำหนดเอง
  4. ตรวจสอบพารามิเตอร์ขนาดของฟอนต์เว้นแต่จะใช้รูปแบบฟอนต์ไดนามิก
  5. การดูลำดับชั้นจะลบล้างการตั้งค่า ปรากฏว่าเป็นไปได้หนึ่งฟอนต์ต่อสแต็ก

ผลลัพธ์

navbar- ตัวเอียง

ตัวอย่าง

การจัดการแบบอักษรที่กำหนดเอง

หมายเหตุ ~ รายการตรวจสอบที่ดีสามารถพบได้จากเว็บไซต์ Code With Chris และคุณสามารถดูโครงการดาวน์โหลดตัวอย่างได้

ถ้าคุณมีตัวอักษรของคุณเองและต้องการที่จะใช้ที่ในกระดานของคุณแล้วมีชุดที่ดีของคำตอบต่อไปนี้ดังนั้นคำถาม คำตอบเดียวระบุขั้นตอนเหล่านี้

  1. รับไฟล์ฟอนต์ที่คุณกำหนดเอง (.ttf, .ttc)
  2. นำเข้าไฟล์แบบอักษรไปยังโครงการ Xcode ของคุณ
  3. ใน app-info.plist ให้เพิ่มคีย์ชื่อ Fonts ที่แอปพลิเคชันจัดเตรียมไว้เป็นประเภทอาร์เรย์เพิ่มชื่อไฟล์แบบอักษรทั้งหมดของคุณไปยังอาร์เรย์หมายเหตุ: รวมถึงนามสกุลไฟล์
  4. ในกระดานเรื่องราวบนแถบการนำทางไปที่ตัวตรวจสอบคุณสมบัติคลิกปุ่มไอคอนขวาของพื้นที่เลือกแบบอักษรในแผงป๊อปอัปให้เลือกแบบอักษรเป็นแบบกำหนดเองและเลือกตระกูลของชื่อแบบอักษรที่ฝังไว้

วิธีแก้ปัญหาแบบอักษรที่กำหนดเอง

ดังนั้น Xcode จึงดูเหมือนว่าสามารถจัดการแบบอักษรที่กำหนดเองบน UINavigationItem ได้อย่างเป็นธรรมชาติ แต่คุณลักษณะนั้นไม่ได้รับการอัปเดตอย่างถูกต้อง (แบบอักษรที่เลือกจะถูกละเว้น)

UINavigationItem

วิธีแก้ปัญหานี้:

วิธีหนึ่งคือการแก้ไขโดยใช้สตอรี่บอร์ดและเพิ่มบรรทัดของโค้ด: ขั้นแรกให้เพิ่ม UIView (UIButton, UILabel หรือคลาสย่อย UIView อื่น ๆ ) ไปยัง View Controller (ไม่ใช่รายการการนำทาง ... Xcode ไม่อนุญาตให้ทำในขณะนี้ ที่). หลังจากที่คุณเพิ่มการควบคุมคุณสามารถปรับเปลี่ยนแบบอักษรในกระดานเรื่องราวและเพิ่มการอ้างอิงเป็นทางออกให้กับ View Controller ของคุณ เพียงกำหนดมุมมองนั้นให้กับ UINavigationItem.titleView คุณยังสามารถตั้งชื่อข้อความในรหัสได้หากจำเป็น รายงานข้อผิดพลาด (23600285)

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView

21

ลองสิ่งนี้:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;

14

รหัส Swift ของฉันสำหรับเปลี่ยนชื่อแถบนำทาง:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes

และถ้าคุณต้องการเปลี่ยนแบบอักษรพื้นหลังฉันก็มีสิ่งนี้ใน AppDelegate ของฉัน:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)

8

เพิ่มรหัสบรรทัดเดียวนี้ในตัวแทนแอปของคุณ - เสร็จสิ้น Lauch มันจะเปลี่ยนแบบอักษรสีของแถบนำทางตลอดทั้งแอปพลิเคชัน

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]

5

นี่คือคำตอบสำหรับคำถามของคุณ:

ย้ายรหัสของคุณไปที่วิธีการด้านล่างเนื่องจากชื่อแถบการนำทางได้รับการอัปเดตหลังจากโหลดมุมมอง ฉันพยายามเพิ่มโค้ดด้านบนใน viewDidLoad ไม่ได้ผลมันทำงานได้ดีในเมธอด viewDidAppear

  -(void)viewDidAppear:(BOOL)animated{}

3

ใคร ๆ ก็ต้องการรุ่น Swift 3 มีการเปลี่ยนแปลงเพียงredColor()red

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]

2

อ่านได้ง่ายขึ้นโดยใช้ตัวอักษร:

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };

2

ฉันมีปัญหาอย่างหนึ่งเพราะเมื่อฉันพยายามเปลี่ยนชื่อ NavigationItem โดยใช้โปรแกรมฉันไม่พบฟอนต์ตระกูลของฉัน (ลองหลาย ๆ อย่าง แต่ไม่สามารถทำให้มันทำงานได้อย่างถูกต้อง) ดังนั้นฉันจึงพบวิธีแก้ปัญหาหนึ่งที่ดีและง่ายมากในสตอรีบอร์ด

  1. ประการแรกคุณเพิ่มภายใต้รายการการนำทางมุมมองหนึ่งตรงกลางและอย่าลืมตั้งค่า backGroundColor เป็นสีที่ชัดเจนเพื่อให้มีสี navBar เหมือนกัน:

ใส่คำอธิบายภาพที่นี่

  1. จากนั้นคุณเพิ่มหนึ่งป้ายกำกับที่คุณสามารถแก้ไขได้ (กำหนดสีของข้อความแบบอักษรขนาด ... ) ในมุมมองนี้
  2. คุณเพิ่มข้อ จำกัด ในป้ายกำกับ (Top = 0, Bottom = 0, Trailing = 0 และ Leading = 0) เพื่อดูและข้อความกึ่งกลางของป้ายกำกับ

สุดท้ายคุณควรมีบางอย่างเช่นนั้นในโครงร่างเอกสาร:

ใส่คำอธิบายภาพที่นี่

และบางอย่างเช่นนั้นใน ViewController ของคุณ:

ใส่คำอธิบายภาพที่นี่

หวังว่ามันจะช่วยได้


2

สวิฟต์: -

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]

1

อันนี้เป็นทางเลือกสำหรับ Swift 4 (ตอบโดย @Josh แล้ว):

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed

1

iOS 11

ใส่คำอธิบายภาพที่นี่

วัตถุประสงค์ -C

if (@available(iOS 11.0, *)) {
    self.navigationController.navigationItem.largeTitleDisplayMode =  UINavigationItemLargeTitleDisplayModeAlways;
    self.navigationController.navigationBar.prefersLargeTitles = true;

// Change Color
    self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

} else {
    // Fallback on earlier versions
}

1

สำหรับ Objective-C เพื่อตั้งค่าแบบอักษรและสี

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}

0

นี่คือคำตอบสำหรับ Swift 4 😁:

    let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

0

อย่าลืมเพิ่มค่า Raw ของคีย์เพื่อหลีกเลี่ยงข้อผิดพลาดในการคอมไพล์

    let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

0

Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]

0

เพิ่มส่วนขยายนี้

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

เพิ่มบรรทัดต่อไปนี้ใน viewDidLoad ()

self.navigationController?.navigationBar.changeFont()

-1

การทำงานใน swift 3.0 สำหรับการเปลี่ยนสีหัวเรื่องคุณต้องเพิ่ม titleTextAttributes เช่นนี้

        let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
        self.navigationController.navigationBar.titleTextAttributes = textAttributes

For changing navigationBar background color you can use this
        self.navigationController.navigationBar.barTintColor = UIColor.white

For changing navigationBar back title and back arrow color you can use this
       self.navigationController.navigationBar.tintColor = UIColor.white
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.