Làm cách nào để thay đổi màu của Thanh điều hướng trong iOS 7?


213

Làm cách nào để thay đổi màu của Thanh điều hướng trong iOS 7?

Về cơ bản tôi muốn đạt được một cái gì đó giống như Twitter Nav Bar (cập nhật Twitter cho iOS7điều đó). Tôi nhúng vào một thanh điều hướng trên đỉnh a view controller. Tất cả những gì tôi muốn là thay đổi màu thanh điều hướng sang màu xanh nhạt cùng với thanh tiện ích ở trên cùng. Tôi dường như không thể tìm thấy một lựa chọn trong tôi storyboard.



[[UINavestionBar xuất hiện] setBarTintColor: [UIColor blackColor]]; cái này sẽ hoạt động từ ios 7 trở đi
Chandramani

Câu trả lời:


319

Hành vi của tintColorcác thanh đã thay đổi trong iOS 7.0. Nó không còn ảnh hưởng đến nền của thanh.

Từ tài liệu:

Tham chiếu lớp barTintColor

Màu sắc để áp dụng cho nền thanh điều hướng.

@property(nonatomic, retain) UIColor *barTintColor

Thảo luận
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.

khả dụng

Có sẵn trong iOS 7.0 trở lên.

Được khai báo trong
UINavestionBar.h

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    // iOS 7.0 or later   
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    self.navigationController.navigationBar.translucent = NO;
}else {
    // iOS 6.1 or earlier
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

Chúng tôi cũng có thể sử dụng điều này để kiểm tra Phiên bản iOS như được đề cập trong Hướng dẫn chuyển đổi giao diện người dùng iOS 7

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
        // iOS 6.1 or earlier
        self.navigationController.navigationBar.tintColor = [UIColor redColor];
    } else {
        // iOS 7.0 or later     
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
        self.navigationController.navigationBar.translucent = NO;
    }

EDIT sử dụng xib

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


3
nhưng tôi có thể đặt mã này ở đâu ?? Tôi rất mới với hahah này. Tôi đã đặt nó trong đại biểu ứng dụng và nó thực sự không hoạt động nhiều. Nó xây dựng chỉ tốt mặc dù.
Patricio Guerra

1
bên trong viewControll
Rajneesh071

1
Tôi sẽ đặt nó trong viewDidLoad trong viewContoder của bạn.
HalR

2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) Điều này sẽ tốt hơn để kiểm tra phiên bản iOS nào bạn đang chạy, như được nêu trong apple trong hướng dẫn chuyển đổi: developer.apple.com/l
David Thompson

1
Bạn cũng có thể sử dụng if ([self.navlationControll.navlationBar responssToSelector: @selector (setBarTintColor :)]) so với số phiên bản để kiểm tra xem bạn có thể đặt barTintColor
Simps Offer

129

Làm những gì mà câu hỏi ban đầu yêu cầu, để có được giao diện Nav Bar cũ của Twitter, nền màu xanh với văn bản màu trắng rất dễ thực hiện chỉ bằng cách sử dụng Trình tạo giao diện trong Xcode.

  • Sử dụng Tài liệu phác thảo, chọn Thanh điều hướng của bạn.
  • Trong Trình theo dõi thuộc tính, trong nhóm Thanh điều hướng, thay đổi Kiểu từ Mặc định thành Đen. Điều này thay đổi màu nền của thanh Điều hướng và Trạng thái thành màu đen và văn bản của chúng thành màu trắng. Vì vậy, pin và các biểu tượng và văn bản khác trong thanh trạng thái sẽ có màu trắng khi ứng dụng đang chạy.
  • Trong cùng một nhóm Thanh điều hướng, hãy thay đổi Màu Bar thành màu theo ý thích của bạn.
  • Nếu bạn có các mục Nút Thanh trong Thanh điều hướng, những mục đó vẫn sẽ hiển thị văn bản của chúng ở màu xanh lam mặc định, vì vậy, trong Trình kiểm tra thuộc tính, nhóm Xem, hãy thay đổi Màu thành màu Trắng.

Điều đó sẽ giúp bạn có được những gì bạn muốn. Dưới đây là một ảnh chụp màn hình sẽ giúp dễ dàng hơn để xem nơi thực hiện các thay đổi.

Nơi thực hiện các thay đổi cần thiết, bao gồm kết quả trong Trình mô phỏng iOS

Lưu ý rằng chỉ thay đổi Thanh màu không thay đổi màu văn bản trong Thanh điều hướng hoặc Thanh trạng thái. Phong cách cũng cần phải được thay đổi.


Chọn màu đen cho iOS 9 không được chấp nhận, bất kỳ cơ hội nào của câu trả lời được cập nhật
Rob85

@ Rob85 Tôi không ở trước Xcode ngay bây giờ, nhưng khi Xcode 7 (với iOS 9) được phát hành, tôi đã xác minh rằng các hướng dẫn này vẫn được cập nhật. Đảm bảo rằng Thanh điều hướng được chọn, kiểu màu đen phải nằm trong trình kiểm tra thuộc tính của Thanh điều hướng.
alondono

2
@ Rob85 Tôi đã kiểm tra trang web dành cho Nhà phát triển của Apple và các kiểu DefaultBlackvẫn có sẵn trong iOS 9. Các kiểu không dùng nữa BlackOpaqueBlackTranslucentđược thay thế bằng sự kết hợp giữa Blackkiểu và hộp đánh dấu mờ. UIBarStyle trên trang web Nhà phát triển của Apple
alondono

Xin lỗi @alondono bạn hoàn toàn chính xác, tôi đã nhấp vào thanh điều hướng trên Bộ điều khiển Điều hướng không có trong tài liệu phác thảo đó là lý do tại sao tôi không thể nhìn thấy nó. Màu đen mà tôi thấy không dùng nữa là trên thanh trạng thái mô phỏng-> thanh trạng thái. Cảm ơn câu trả lời của bạn
Rob85

@ Rob85 Thật tuyệt! Cảm ơn vì đã cho tôi biết.
alondono

76
self.navigationBar.barTintColor = [UIColor blueColor];
self.navigationBar.tintColor = [UIColor whiteColor];
self.navigationBar.translucent = NO;

// *barTintColor* sets the background color
// *tintColor* sets the buttons color

4
Và chính xác tôi có thể đặt mã này ở đâu ?? Xin lỗi vì câu hỏi của người mới ở đó hahah
Patricio Guerra

1
mã có thể được đặt trong phương thức - (void) viewDidLoad của bộ điều khiển điều hướng
pNre

2
Trong iOS 9, cài đặt barTintColor thành màu đen sẽ khiến thời gian, tên thiết bị và pin cũng bị đen để bạn không thể nhìn thấy chúng. Để tránh điều này, thay vì sử dụng barTintColor, hãy sử dụng self.navlationControll.navlationBar.barStyle = UIBarStyleBlack;
TheJeff

46

Trong một ứng dụng dựa trên Điều hướng, bạn có thể đặt mã trong AppDelegate. Một mã chi tiết hơn có thể là:

// Navigation bar appearance (background and title)

[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor titleColor], NSForegroundColorAttributeName, [UIFont fontWithName:@"FontNAme" size:titleSize], NSFontAttributeName, nil]];

[[UINavigationBar appearance] setTintColor:[UIColor barColor]];

// Navigation bar buttons appearance

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor textBarColor], NSForegroundColorAttributeName, shadowColor, NSShadowAttributeName, [UIFont fontWithName:@"FontName" size:titleSize], NSFontAttributeName, nil];

6
thêm [[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];cho iOS 7
Samin

24

Trong viewDidLoad, thiết lập:

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];

Thay đổi ( blueColor) thành bất kỳ màu nào bạn muốn.


18

Đối với màu thanh điều hướng thay đổi nhanh chóng:

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

thay đổi tiêu đề phông chữ, kích thước, màu sắc:

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

14

Trong iOS 7, bạn phải sử dụng thuộc tính -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];

13

Nếu bạn muốn sử dụng mã hex, đây là cách tốt nhất để làm điều đó.

Đầu tiên, xác định điều này ở đầu lớp của bạn:

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

Sau đó, bên trong "ứng dụng didFinishLaunchingWithOptions", hãy đặt cái này:

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x00b0f0)];

Đặt mã hex của bạn thay cho 00b0f0.


1
[Xuất hiện UINavestionBar] rất hữu ích.
Ken

11

Nếu bạn cần hỗ trợ ios6 và ios7 thì bạn sẽ có được màu xanh nhạt đặc biệt đó bằng cách sử dụng tính năng này trong UIViewControll của bạn :

- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
    if ([[ver objectAtIndex:0] intValue] >= 7) {
        self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
        self.navigationController.navigationBar.translucent = NO;
    }else{
        self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:89/255.0f green:174/255.0f blue:235/255.0f alpha:1.0f];
    }
}

3
Trên iOS 7: -elf.navlationControll.navlationBar.barTintColor là màu thanh
IgniteCoders

10

Nó thực sự dễ hơn những câu trả lời tôi đã thấy ở đây:

1) Just make sure you select the navigation bar on the Navigation control. 
2) Select the color you want in the bar tint.
3) You have other options too, and/or individually on each view (just play with it).

Tôi hi vọng nó sẽ giúp ích cho mọi người. Tôi không thích câu trả lời tôi thấy. Tôi muốn giữ mã của mình càng sạch càng tốt. Không nói rằng thật sai lầm khi làm điều đó theo lập trình, nhưng có những người ngoài kia như tôi .... đây là dành cho các bạn. Thay đổi màu sắc của thanh điều hướng


Cảm ơn, tôi đã thay đổi cách đây vài tháng khi chơi xung quanh và không thể tìm ra cách thay đổi lại!
xứng

Không có vấn đề gì, rất vui vì tôi có thể giúp ai đó
pqsk

Tôi nghĩ rằng đây là câu trả lời thẳng về phía trước nhất! Thx
Ispas Claudiu

Không vấn đề gì. Vui vì nó vẫn hữu ích
pqsk

5

Để làm cho mã của Rajneesh071 hoàn tất, bạn cũng có thể muốn đặt màu tiêu đề của thanh điều hướng (và phông chữ, nếu bạn muốn) vì hành vi mặc định đã thay đổi từ iOS 6 thành 7:

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7)
{
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.translucent = NO;
    NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithDictionary:mainNavController.navigationBar.titleTextAttributes];
    [textAttributes setValue:[UIColor whiteColor] forKey:UITextAttributeTextColor];
    self.navigationController.navigationBar.titleTextAttributes = textAttributes;
}
else
{
    self.navigationController.navigationBar.tintColor = [UIColor blackColor];
}

5

Chỉ thêm mã này vào ViewContorller hoặc trong của bạnAppDelegate

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{
    //This is For iOS6
    [self.navigationController.navigationBar setTintColor:[UIColor yellowColor]];
}
else
{
    //This is For iOS7
    [self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
}

4
//You could place this code into viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
 }   
//Or you can place it into viewDidAppear
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
    self.navigationController.navigationBar.tintColor = [UIColor redColor];
    //change the nav bar colour
    self.navigationController.view.backgroundColor = [UIColor redColor];
    //change the background colour
    self.navigationController.navigationBar.translucent = NO;
}

4

Trong một ứng dụng dựa trên điều hướng, bạn có thể thay đổi màu sắc

NSArray *ver = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
if ([[ver objectAtIndex:0] intValue] >= 7) {
    self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
    self.navigationController.navigationBar.translucent = NO;
} else {
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];
}

1
Thay đổi thuộc tính tintColor trong iOS7 không còn có tác dụng thay đổi màu nền của thanh. Màu sắc trong iOS7 chỉ ảnh hưởng đến màu văn bản của BarButtonItems, v.v.
Pascal Bayer

4
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)


  if (_kisiOS7)
    {
        [[UINavigationBar appearance] setBarTintColor:[UIcolor redcolor]];
    }
    else
    {
        [[UINavigationBar appearance] setBackgroundColor:[UIcolor blackcolor]];
        [[UINavigationBar appearance] setTintColor:[UIcolor graycolor]];
    }

3

Câu hỏi này và những câu trả lời là hữu ích. Với chúng, tôi có thể đặt màu xanh đậm mong muốn navigationBarvới tiêu đề và nút văn bản màu trắng.

Nhưng tôi cũng cần thay đổi đồng hồ, sóng mang, cường độ tín hiệu, v.v. thành màu trắng. Màu đen không đủ tương phản với màu xanh đậm.

Tôi có thể đã bỏ qua giải pháp mà theo một trong các câu trả lời trước, nhưng tôi đã có thể thực hiện thay đổi đó bằng cách thêm dòng này để cấp cao nhất của tôi viewController's viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

UIStatusBarStyleLightContenthoạt động, nhưng có vẻ như enum chính xác setBarStyle:UIBarStyleBlack
Collin Allen

3
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
}

3

Đối với màu sắc:

[[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]];

Đối với hình ảnh

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];
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.