Màu văn bản và mũi tên của iOS 7


234

Tôi muốn đặt nền cho Navigation Bar là màu đen và tất cả các màu bên trong nó là màu trắng .

Vì vậy, tôi đã sử dụng mã này:

[[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [UIColor whiteColor],
      NSForegroundColorAttributeName,
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
      NSForegroundColorAttributeName,
      [UIFont fontWithName:@"Arial-Bold" size:0.0],
      NSFontAttributeName,
      nil]];

Nhưng màu văn bản nút quay lại , mũi tênnút thanh vẫn có màu xanh mặc định .
Làm thế nào để thay đổi những màu sắc như trên hình ảnh dưới đây?

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


1
thử trong AppDelegate if ([self.window responssToSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S


Điều thú vị là mã của bạn hoạt động rất tốt đối với tôi (chỉ muốn thay đổi màu văn bản thành màu trắng). Cảm ơn!
William T. Mallard

Màu xanh bạn đang sử dụng là gì? Có vẻ tốt đẹp!
ebi

@ebi một số người không thích chia sẻ. Chỉ cần sử dụng một công cụ chọn màu để chọn ra. Hoặc .... bạn đi: RGB: (18, 60, 133)
pnizzle

Câu trả lời:


753

Hành vi từ một số thuộc tính của UINavigationBarđã thay đổi từ iOS 7 . Bạn có thể thấy trong hình ảnh hiển thị dưới đây:

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


Hai liên kết đẹp mà tôi muốn chia sẻ với bạn. Để biết thêm chi tiết, bạn có thể đi qua các liên kết sau:

  1. Hướng dẫn chuyển đổi giao diện người dùng iOS 7 .
  2. Cách cập nhật ứng dụng cho iOS 7 .

Tài liệu Apple cho barTintColor nói:

Màu này được làm mờ theo mặc định trừ khi bạn đặt thuộc tính mờ thành NO.

Mã mẫu:

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[self.navigationController.navigationBar 
 setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
self.navigationController.navigationBar.translucent = NO;

Tôi đã thử: self.nav.navulationBar.tintColor = [UIColor whiteColor]; self.nav.navlationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255.0 green: 12.0 / 255.0 blue: 19.0 / 255.0 alpha: 1.0]; Nhưng mọi thứ vẫn là màu xanh.
1110

2
Tôi đọc nó trước đây nhưng thay đổi này chỉ văn bản chứ không phải và mũi tên. Trời vẫn xanh :(
1110

1
@ 1110: Hãy xem: Sử dụng tông màu
Bhavin

2
@Ch Blues: Làm thế nào về dòng này? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin

4
Đừng quên bạn có thể thay đổi tông màu cho toàn bộ ứng dụng trong ứng dụngDelegate: [[UINavlationBar xuất hiện] setTintColor: [UIColor blackColor]];
simon_smiley 8/07/2015

85

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

Điều này khiến tôi mất khoảng nửa ngày để tìm hiểu nhưng đây là những gì làm việc cho tôi. Bên trong rootViewControll khởi tạo navigationContoder, tôi đặt mã này bên trong phương thức viewDidAppear của mình:

//set bar color
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:85.0/255.0 green:143.0/255.0 blue:220.0/255.0 alpha:1.0]];
//optional, i don't want my bar to be translucent
[self.navigationController.navigationBar setTranslucent:NO];
//set title and title color
[self.navigationItem setTitle:@"Title"];
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];
//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

Bài viết đầy đủ của tôi về điều này ở đây


1
Nếu bạn gặp vấn đề khi thay đổi màu của mũi tên lùi, đoạn mã này sẽ khắc phục sự cố. Tối thiểu, bạn sẽ cần dòng mã cuối cùng được thêm vào rootViewControll thực tế của bạn.
Nga

Vâng, John. Tôi đã lãng phí khoảng một giờ vào ngày hôm qua là tốt. Một vấn đề (vấn đề lớn) là các tài liệu rất tệ trong việc chỉ ra tất cả các thuộc tính có thể. Bất kỳ ý tưởng nơi họ có thể được liệt kê? TY.
Alex Zavatone

Cảm ơn @john Nó chồng lấp Màu tùy chỉnh của tôi, Bạn có thể giải thích cho tôi tại sao không?
Vaibhav Limbani

Tôi nghĩ bạn nên tạo một câu hỏi mới. Tôi không thể cho bạn biết lý do tại sao trừ khi tôi thấy mã của bạn và những gì bạn đang làm. @MacGeek
John Riselvato

3
Cảm ơn, nó đã làm việc :). Nhưng UITextAttributionTextColor không được dùng trong iOS 7, bây giờ bạn nên sử dụng NSForegroundColorAttributionName
YYamil

37

Swift3, ios 10

Để gán màu trên toàn cầu, trong AppDelegate didFinishLaunchingWithOptions:

let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

Swift 4, iOS 11

let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
UINavigationBar.appearance().titleTextAttributes = textAttributes

21

Câu trả lời của Vin làm việc rất tốt cho tôi. Đây là giải pháp tương tự cho các nhà phát triển C # sử dụng Xamarin.iOS / MonoTouch:

var navigationBar = NavigationController.NavigationBar; //or another reference
navigationBar.BarTintColor = UIColor.Blue;
navigationBar.TintColor = UIColor.White;
navigationBar.SetTitleTextAttributes(new UITextAttributes() { TextColor = UIColor.White });
navigationBar.Translucent = false;

Không biết bạn có thể đặt SetTitleTextAttribution theo cách bạn đã làm.
Brad Moore

12

Swift / iOS8

let textAttributes = NSMutableDictionary(capacity:1)
textAttributes.setObject(UIColor.whiteColor(), forKey: NSForegroundColorAttributeName)
navigationController?.navigationBar.titleTextAttributes = textAttributes

3
hãy để textAttribut = NSMutableDixi (dung lượng: 1) bây giờ là lệnh gọi chính xác cho việc khởi tạo NSMutableDixi.
juliensaad

12
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

1
Tôi thích cách tiếp cận này vì bạn có thể đặt nó trong AppDelegate và nó sử dụng proxy Giao diện.
Niyog Ray

8

Để thay đổi màu của UINavigationBartiêu đề một cách chính xác, hãy sử dụng mã này:

[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]];

UITextAttributeTextColorkhông dùng nữa trong phiên bản ios 7 mới nhất. Sử dụng NSForegroundColorAttributeNamethay thế.


5

Nếu bạn đang tìm cách thay đổi kích thước văn bản tiêu đề và màu văn bản, bạn phải thay đổi tiêu đề NSDipedia titleTextAttribution , cho 2 đối tượng của nó:

    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial" size:13.0],NSFontAttributeName,
                                                                  [UIColor whiteColor], NSForegroundColorAttributeName, 
                                                                  nil];

2

Tôi nghĩ rằng câu trả lời trước đây là chính xác, đây là một cách khác để làm điều tương tự. Tôi đang chia sẻ nó ở đây với những người khác chỉ trong trường hợp nếu nó trở nên hữu ích cho ai đó. Đây là cách bạn có thể thay đổi màu văn bản / tiêu đề cho thanh điều hướng trong ios7:

UIColor *red = [UIColor colorWithRed:254.0f/255.0f green:0.0f/255.0f blue:0.0f/255.0f alpha:1.0];
NSMutableDictionary *navBarTextAttributes = [NSMutableDictionary dictionaryWithCapacity:1];
[navBarTextAttributes setObject:red forKey:NSForegroundColorAttributeName ];
self.navigationController.navigationBar.titleTextAttributes = navBarTextAttributes;

1

Có vẻ như các Accessibilityđiều khiển trong phần iOS Settingsghi đè gần như mọi thứ bạn cố gắng thực hiện theo màu cho các nút trên thanh điều hướng. Đảm bảo rằng bạn có tất cả các cài đặt cho các vị trí mặc định (đặt độ tương phản tăng, chữ đậm , hình dạng nút, v.v.) nếu không bạn sẽ không thấy bất cứ điều gì thay đổi. Khi tôi đã làm điều đó, tất cả các mã thay đổi màu sắc bắt đầu hoạt động như mong đợi. Bạn có thể không cần tắt tất cả, nhưng tôi đã không theo đuổi nó thêm nữa.


Chính xác những gì đã xảy ra với tôi. Tôi không thể thay đổi màu sắc của một mục nút thanh khi "Chữ đậm" được bật. Điều đó không tốt. Bây giờ tôi sẽ phải sử dụng đồ họa thay thế :-(
Ken

0

Swift 5 / iOS 13

Để thay đổi màu của tiêu đề trong bộ điều khiển:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: 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.