Cách thay đổi màu nền UINavigationBar từ AppDelegate


90

Tôi biết cách thay đổi UINavigationBarhình nền bằng cách làm

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nabbar"] forBarMetrics:UIBarMetricsDefault];

và tôi biết cách đặt thanh thành các màu khác nhau trong mỗi Views..... Bây giờ tôi muốn thay đổi màu nền mà không cần sử dụng hình ảnh thành màu đồng nhất từ app delegate. Tôi không muốn đặt nó mỗi lần từ mỗi lần xem và tôi không muốn viết a CGRect.

Tôi đã thử [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];nhưng không hoạt động và tôi không thể tìm thấy mã ở bất kỳ đâu hoạt động trong ủy quyền ứng dụng.

Bất cứ ai có thể xin vui lòng chỉ cho tôi đúng hướng?

Câu trả lời:


202

Bạn có thể dùng [[UINavigationBar appearance] setTintColor:myColor];

Kể từ iOS 7, bạn cần phải thiết lập [[UINavigationBar appearance] setBarTintColor:myColor];và cả [[UINavigationBar appearance] setTranslucent:NO].

[[UINavigationBar appearance] setBarTintColor:myColor];
[[UINavigationBar appearance] setTranslucent:NO];

Cảm ơn, bạn có biết cách loại bỏ gradient mặc định màu trắng ở trên cùng để làm cho nó có một màu đồng nhất không?
Jonathan Thurft vào

1
Với tintColorgradient sẽ ở lại. Nếu bạn không muốn có gradient này, bạn cần phân lớp UINavigationBar HOẶC để tạo UIImage cho giao diện.
Seb Thiebaud

59
trên iOS 7 mà không làm việc, tôi đã phải sử dụngnavigationBar.barTintColor = myColor;
Juan de la Torre

4
translucentchỉ không thể đặt thuộc tính bằng cách sử dụng UIAppearance trong iOS 6 và iOS 7. Vì vậy, [[UINavigationBar appearance] setTranslucent:NO]ứng dụng sẽ bị NSInvalidArgumentExceptionlỗi. Sử dụng [self.navigationController.navigationBar setTranslucent:NO]hoặc bỏ chọn tính trong suốt bằng IB.
Sam

1
Phiên bản Swift: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034

103

Để thay đổi màu nền chứ không phải màu, đoạn mã sau sẽ hoạt động:

[self.navigationController.navigationBar setBarTintColor:[UIColor greenColor]];
[self.navigationController.navigationBar setTranslucent:NO];

3
Đây phải là câu trả lời được chấp nhận, hoạt động hoàn hảo cho iOS7.
joshuahornby 10

Câu trả lời đúng cho iOS 7. Làm việc cho tôi.
LondonGuy

Độ trong suốt là yêu cầu để thực hiện công việc này. Vì câu trả lời được chấp nhận không bao gồm điều đó, đây phải là câu trả lời được chấp nhận.
Tristan Warner-Smith

3
Chỉ cần làm rõ, câu trả lời được chấp nhận là dành cho AppDelegate và câu trả lời này dành cho trong View Controller.
Dean

@Dean nói đúng. Câu trả lời được chấp nhận sẽ có hiệu lực đối với câu trả lời mới được tạo UIViewControllers, trong khi câu trả lời này sẽ hiển thị hiệu ứng bất cứ khi nào được gọi.
aramusss,


15

Cú pháp Swift:

    UINavigationBar.appearance().barTintColor = UIColor.whiteColor() //changes the Bar Tint Color

Tôi chỉ đưa nó vào AppDelegate didFinishLaunchingWithOptions và nó vẫn tồn tại trong suốt ứng dụng


8

Swift :

self.navigationController?.navigationBar.barTintColor = UIColor.red
self.navigationController?.navigationBar.isTranslucent = false

6

Bạn có thể dễ dàng thực hiện điều này với Xcode 6.3.1. Chọn Thanh điều hướng của bạn trong đường viền Tài liệu. Chọn Trình kiểm tra thuộc tính. Bỏ chọn Mờ. Đặt Bar Tint thành màu bạn muốn. Làm xong!


Cảm ơn, tôi tìm thấy rất nhiều tài liệu tham khảo về cách để làm điều này trong ObjC và nhanh chóng, nhưng không ai nhắc đến nó có sẵn trong IB
Nick

3

Như các câu trả lời khác đã đề cập, bạn có thể sử dụng setTintColor:, nhưng bạn muốn có một màu đồng nhất và điều đó không thể thực hiện việc thiết lập tông màu AFAIK.

Giải pháp là tạo một hình ảnh theo chương trình và đặt hình ảnh đó làm hình nền cho tất cả các thanh điều hướng thông qua UIAppearance. Về kích thước của hình ảnh, tôi không chắc liệu hình ảnh 1x1 pixel có hoạt động hay không hoặc bạn có cần kích thước chính xác của thanh điều hướng hay không. Hãy kiểm tra câu trả lời thứ hai của câu hỏi này để xem cách tạo hình ảnh.

Như một lời khuyên, tôi không thích "quá tải" ủy nhiệm ứng dụng với những thứ như thế này. Những gì tôi có xu hướng làm là tạo một lớp được đặt tên AppearanceConfigurationchỉ với một phương thức công khai configureAppearance, nơi tôi đặt tất cả nội dung UIAppearance mà tôi muốn và sau đó tôi gọi phương thức đó từ ứng dụng ủy quyền.


2

Bạn có thể đặt màu Nền UINavigation bằng cách sử dụng mã này trong bất kỳ bộ điều khiển chế độ xem nào

self.navigationController.navigationBar.backgroundColor = [UIColor colorWithRed:10.0f/255.0f green:30.0f/255.0f blue:200.0f/255.0f alpha:1.0f];

2

Trong Swift 4.2 và Xcode 10.1

Bạn có thể thay đổi màu thanh điều hướng từ AppDelegate trực tiếp cho toàn bộ dự án của mình.

Trong didFinishLaunchingWithOptions launchOptions:ghi dưới đây để dòng mã

UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)

Đây

tintColor dùng để đặt các hình nền như hình ảnh nút quay lại và dòng menu, v.v. (Xem hình ảnh menu bên trái và bên phải bên dưới)

barTintColor dành cho màu nền của thanh điều hướng

Nếu bạn muốn đặt màu thanh điều hướng của bộ điều khiển chế độ xem cụ thể, hãy viết mã bên dưới vào viewDidLoad()

//Add navigation bar colour
navigationController?.navigationBar.barTintColor = UIColor(red: 2/255, green: 96/255, blue: 130/255, alpha: 1.0)
navigationController?.navigationBar.tintColor = UIColor.white

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


-1

Mã màu là vấn đề ở đây. Thay vì sử dụng 195/255, hãy sử dụng 0,7647 hoặc 195.f / 255.f Vấn đề là chuyển đổi phao không hoạt động bình thường. Hãy thử sử dụng giá trị float chính xác.

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.