iOS thay đổi phông chữ và màu sắc tiêu đề của thanh điều hướng


101

Vì vậy, tôi có mã này sẽ thay đổi phông chữ tiêu đề thanh điều hướng, nhưng nó không

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

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

Thay đổi phông chữ nút quay lại bằng mã này hoạt động tốt.

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

Câu trả lời:


251

Cách chính xác để thay đổi phông chữ tiêu đề (và màu) là:

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

Chỉnh sửa: Swift 4.2

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

Chỉnh sửa: 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
Kích thước vẫn như nhau bất kể giá trị tôi cố gắng
Raphael Royer-Rivard

1
Có, tôi nhận ra rằng phông chữ của tôi không được tải đúng cách. Vẫn không thể hiểu tại sao, tôi đã nhập OpenSans-Light và OpenSans-Thường xuyên theo cùng một cách, chỉ OpenSans-Light có vẻ là có thể sử dụng ...
Raphael Royer-Rivard

1
Mã Obj-C thiếu dấu ngoặc đóng. Nó phải là: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-regular" size: 21]}];
Dylan Hand

truy cập liên kết để thay đổi phông chữ backBarButton: stackoverflow.com/a/16538596/5967144
soorej babu

Còn khi sử dụng LargeTitle NavBar thì sao? Tôi không tìm thấy bất kỳ navigationBar.LargeTitleTextAttributeshoặc bất cứ điều gì về sự tôn trọng đó. Bạn có biết cách đặt phông chữ LargeTitle trên toàn cầu không?
iKK

54

Không có gì sai với các câu trả lời khác. Tôi chỉ chia sẻ phiên bản bảng phân cảnh để đặt phông chữ.

1. Chọn Thanh điều hướng của bạn trong Bộ điều khiển điều hướng của bạn

navbar

2. Thay đổi Phông chữ Tiêu đề trong Trình kiểm tra Thuộc tính

phông chữ tiêu đề

(Bạn có thể cần phải chuyển đổi Màu thanh cho Thanh điều hướng trước khi Xcode chọn phông chữ mới)

Ghi chú (Lưu ý)

Đã xác minh rằng điều này hoạt động trên Xcode 7.1.1+. ( Xem các Mẫu bên dưới )

  1. Bạn cần chuyển đổi màu thanh điều hướng trước khi phông chữ có hiệu lực (có vẻ như một lỗi trong Xcode; bạn có thể chuyển nó về mặc định và phông chữ sẽ dính)
  2. Nếu bạn chọn phông chữ hệ thống ~ Hãy chắc chắn rằng kích thước không phải là 0.0 (Nếu không, phông chữ mới sẽ bị bỏ qua)

kích thước

  1. Có vẻ như điều này hoạt động không có vấn đề gì khi chỉ có một NavBar trong hệ thống phân cấp chế độ xem. Có vẻ như các Thanh điều hướng phụ trong cùng một ngăn xếp bị bỏ qua. (Lưu ý rằng nếu bạn hiển thị navBar của bộ điều khiển điều hướng chính thì tất cả các cài đặt navBar tùy chỉnh khác sẽ bị bỏ qua).

Gotchas (deux)

Một số trong số này được lặp lại có nghĩa là chúng rất có thể đáng chú ý.

  1. Đôi khi xml bảng phân cảnh bị hỏng. Điều này yêu cầu bạn xem lại cấu trúc trong Bảng phân cảnh ở chế độ Mã nguồn (nhấp chuột phải vào tệp bảng phân cảnh> Mở dưới dạng ...)
  2. Trong một số trường hợp, thẻ navigationItem được liên kết với thuộc tính thời gian chạy do người dùng xác định được đặt làm con xml của thẻ view thay vì thẻ view controller. Nếu vậy, hãy xóa nó khỏi giữa các thẻ để hoạt động đúng.
  3. Chuyển đổi NavBar Tint để đảm bảo sử dụng phông chữ tùy chỉnh.
  4. Xác minh thông số kích thước của phông chữ trừ khi sử dụng kiểu phông chữ động
  5. Chế độ xem phân cấp sẽ ghi đè cài đặt. Dường như có thể có một phông chữ trên mỗi ngăn xếp.

Kết quả

navbar-italic

Mẫu

Xử lý phông chữ tùy chỉnh

Lưu ý ~ Bạn có thể tìm thấy danh sách kiểm tra đẹp từ trang web Code With Chris và bạn có thể xem dự án tải xuống mẫu.

Nếu bạn có phông chữ của riêng mình và muốn sử dụng phông chữ đó trong bảng phân cảnh của mình, thì có một bộ câu trả lời phù hợp cho Câu hỏi SO sau đây . Một câu trả lời xác định các bước này.

  1. Nhận cho bạn tệp phông chữ tùy chỉnh (.ttf, .ttc)
  2. Nhập các tệp phông chữ vào dự án Xcode của bạn
  3. Trong app-info.plist, hãy thêm khóa có tên Phông chữ do ứng dụng cung cấp. Đây là kiểu mảng, hãy thêm tất cả tên tệp phông chữ của bạn vào mảng, lưu ý: bao gồm cả phần mở rộng tệp.
  4. Trong bảng phân cảnh, trên Thanh điều hướng, chuyển đến Trình kiểm tra thuộc tính, nhấp vào nút biểu tượng bên phải của vùng chọn Phông chữ. Trong bảng điều khiển bật lên, chọn Phông chữ thành Tùy chỉnh và chọn Tên phông chữ được nhúng của bạn.

Giải pháp Phông chữ Tùy chỉnh

Vì vậy, Xcode tự nhiên trông giống như nó có thể xử lý các phông chữ tùy chỉnh trên UINavigationItem nhưng tính năng đó không cập nhật đúng cách (Phông chữ được chọn bị bỏ qua).

UINavigationItem

Để giải quyết vấn đề này:

Một cách là khắc phục sự cố bằng cách sử dụng bảng phân cảnh và thêm một dòng mã: Đầu tiên hãy thêm một UIView (UIButton, UILabel hoặc một số lớp con UIView khác) vào View Controller (Không phải Mục điều hướng ... Xcode hiện không cho phép một UIView làm cái đó). Sau khi thêm điều khiển, bạn có thể sửa đổi phông chữ trong bảng phân cảnh và thêm tham chiếu làm lối thoát cho Bộ điều khiển chế độ xem của mình. Chỉ cần gán chế độ xem đó cho UINavigationItem.titleView. Bạn cũng có thể đặt tên văn bản trong mã nếu cần. Đã báo cáo lỗi (23600285).

@IBOutlet var customFontTitleView: UIButton!

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

21

Thử cái này:

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

14

Mã Swift của tôi để thay đổi tiêu đề Thanh điều hướng:

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

Và nếu bạn cũng muốn thay đổi phông nền thì tôi có cái này trong AppDelegate của mình:

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

8

THÊM mã dòng đơn này trong Đại biểu ứng dụng của bạn - Đã Hoàn thành Lauch. Nó sẽ thay đổi Font chữ, màu sắc của thanh điều hướng trong toàn bộ ứng dụng.

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

5

Đây là câu trả lời cho câu hỏi của bạn:

Di chuyển mã của bạn đến phương pháp bên dưới vì tiêu đề thanh điều hướng được cập nhật sau khi chế độ xem được tải. Tôi đã thử thêm đoạn mã trên trong viewDidLoad không hoạt động, nó hoạt động tốt trong phương thức viewDidAppear.

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

3

Bất kỳ ai cũng cần phiên bản Swift 3. redColor()đã thay đổi thành chỉ red.

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

2

Nó dễ đọc hơn một chút bằng cách sử dụng các ký tự:

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

2

Tôi đã gặp một vấn đề vì khi tôi cố gắng thay đổi tiêu đề NavigationItem của mình theo chương trình, tôi không thể tìm thấy phông chữ gia đình của mình (đã thử nhiều cách nhưng không thể làm cho nó chạy chính xác) vì vậy tôi đã tìm thấy một giải pháp rất hay và dễ dàng trong bảng phân cảnh.

  1. Đầu tiên, bạn thêm dưới Mục điều hướng một chế độ xem ở giữa và đừng quên đặt backGroundColor thành màu rõ ràng để có cùng màu với navBar:

nhập mô tả hình ảnh ở đây

  1. Sau đó, bạn thêm một Nhãn mà bạn có thể chỉnh sửa (đặt màu văn bản, phông chữ, kích thước ...) trong dạng xem này
  2. Bạn thêm các ràng buộc vào nhãn (Trên cùng = 0, Dưới cùng = 0, Theo dõi = 0 và Hàng đầu = 0) vào Chế độ xem và văn bản chính giữa của nhãn

Cuối cùng, bạn sẽ có một cái gì đó như vậy trong dàn bài tài liệu:

nhập mô tả hình ảnh ở đây

Và một cái gì đó tương tự trong ViewController của bạn:

nhập mô tả hình ảnh ở đây

Hy vọng nó có thể giúp ích.


2

Nhanh:-

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

1

Cái này để thay thế cho Swift 4 (đã được trả lời bởi @Josh):

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

1

iOS 11

nhập mô tả hình ảnh ở đây

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

Đối với Objective-C để đặt Phông chữ và Màu sắc

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

}

0

Đây là câu trả lời cho 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

Đừng quên thêm các giá trị Raw của các khóa để tránh lỗi biên dịch.

    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

Thêm phần mở rộng này

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

Thêm dòng sau vào viewDidLoad ()

self.navigationController?.navigationBar.changeFont()

-1

Làm việc trong nhanh chóng 3.0 Để thay đổi màu tiêu đề, bạn cần thêm titleTextAttributes như thế này

        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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.