วิธีการเปลี่ยนสีของแถบนำทางใน iOS 7


213

ฉันจะเปลี่ยนสีแถบนำทางใน iOS 7 ได้อย่างไร

โดยทั่วไปฉันต้องการบรรลุบางสิ่งเช่น Twitter Nav Bar (อัพเดต Twitter สำหรับ iOS7สิ่งนั้น) view controllerฉันฝังในแถบการนำบน ทั้งหมดที่ฉันต้องการคือการเปลี่ยนสีแถบนำทางเป็นสีฟ้าอ่อนพร้อมกับแถบอรรถประโยชน์ที่ด้านบน storyboardฉันไม่สามารถดูเหมือนจะหาตัวเลือกในของฉัน



[[ลักษณะของ UINavigationBar] setBarTintColor: [UIColor blackColor]]; wll นี้ทำงานได้จาก ios 7 เป็นต้นไป
Chandramani

1
ทำตามนี้กวดวิชา appcoda.com/customize-navigation-status-bar-ios-7
Chandramani

คำตอบ:


319

พฤติกรรมของtintColorสำหรับบาร์มีการเปลี่ยนแปลงใน iOS 7.0 มันไม่มีผลต่อพื้นหลังของแถบ

จากเอกสาร:

การอ้างอิงระดับbarTintColor

สีอ่อนที่ใช้กับพื้นหลังของแถบนำทาง

@property(nonatomic, retain) UIColor *barTintColor

คำอธิบายสีนี้ทำโปร่งแสงโดยค่าเริ่มต้นถ้าคุณตั้งโปร่งแสงทรัพย์สินไป
NO

ความพร้อมใช้งาน

พร้อมใช้งานใน iOS 7.0 และใหม่กว่า

ประกาศใน
UINavigationBar.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];
}

นอกจากนี้เรายังสามารถใช้สิ่งนี้เพื่อตรวจสอบเวอร์ชัน iOS ตามที่กล่าวไว้ใน คู่มือการเปลี่ยน iOS 7 UI

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;
    }

แก้ไข โดยใช้ xib

ป้อนคำอธิบายรูปภาพที่นี่


3
แต่ฉันจะวางรหัสนี้ได้ที่ไหน ฉันใหม่มากสำหรับ hahah นี้ ฉันวางไว้ภายในตัวแทนแอปและดูเหมือนว่ามันจะทำอะไรได้ไม่มาก มันสร้างได้ดีแม้ว่า
Patricio Guerra

1
Inside viewController
Rajneesh071

1
ฉันจะวางไว้ใน viewDidLoad ใน viewController ของคุณ
HalR

2
if (floor (NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) สิ่งนี้จะเป็นการดีกว่าที่จะทดสอบเวอร์ชัน iOS ที่คุณใช้งานอยู่ดังที่แอปเปิ้ลระบุไว้ในคู่มือการเปลี่ยนแปลง: developer.apple.com/library/ios/documentation/userexperience/
David Thompson

1
คุณยังสามารถใช้ถ้า ([self.navigationController.navigationBar responsesToSelector: @selector (setBarTintColor :)]) เทียบกับหมายเลขเวอร์ชั่นเพื่อตรวจสอบว่าคุณสามารถตั้งค่า barTintColor
SimpsOff ได้ไหม

129

ทำตามคำถามเดิมที่ถาม - เพื่อให้ได้ลักษณะ Nav Bar ของ Twitter พื้นหลังสีน้ำเงินพร้อมข้อความสีขาว - ทำได้ง่ายมากเพียงใช้ตัวสร้างส่วนติดต่อใน Xcode

  • ใช้เค้าร่างเอกสารเลือกแถบนำทางของคุณ
  • ในตัวตรวจสอบแอตทริบิวต์ในกลุ่มแถบการนำทางให้เปลี่ยนสไตล์จากค่าเริ่มต้นเป็นสีดำ สิ่งนี้จะเปลี่ยนสีพื้นหลังของแถบการนำทางและแถบสถานะเป็นสีดำและข้อความเป็นสีขาว ดังนั้นแบตเตอรี่และไอคอนและข้อความอื่น ๆ ในแถบสถานะจะเป็นสีขาวเมื่อแอพทำงาน
  • ในกลุ่มแถบการนำทางเดียวกันให้เปลี่ยนแถบสีเป็นสีที่คุณชอบ
  • หากคุณมีรายการปุ่มบาร์ในแถบนำทางของคุณรายการเหล่านั้นจะยังคงแสดงข้อความของพวกเขาในสีฟ้าเริ่มต้นดังนั้นในกลุ่มผู้ตรวจสอบคุณสมบัติดูกลุ่มเปลี่ยนสีเป็นสีขาว

ที่ควรได้รับสิ่งที่คุณต้องการ นี่คือภาพหน้าจอที่จะทำให้ง่ายต่อการดูตำแหน่งที่จะทำการเปลี่ยนแปลง

ตำแหน่งที่จะทำการเปลี่ยนแปลงที่จำเป็นรวมถึงผลลัพธ์ใน iOS Simulator

โปรดทราบว่าการเปลี่ยนเฉพาะแถบสีเท่านั้นจะไม่เปลี่ยนสีข้อความในแถบนำทางหรือแถบสถานะ รูปแบบจะต้องมีการเปลี่ยนแปลง


การเลือกสีดำสำหรับ iOS 9 นั้นไม่รองรับโอกาสของคำตอบที่อัพเดทแล้ว
Rob85

@ Rob85 ฉันไม่ได้อยู่หน้า Xcode ตอนนี้ แต่เมื่อ Xcode 7 (พร้อม iOS 9) ได้รับการปล่อยตัวฉันยืนยันว่าคำแนะนำเหล่านี้ยังคงเป็นปัจจุบันอยู่ ตรวจสอบให้แน่ใจว่าได้เลือกแถบนำทางสไตล์สีดำควรอยู่ในตัวตรวจสอบคุณสมบัติของแถบนำทาง
alondono

2
@ Rob85 ฉันได้ตรวจสอบเว็บไซต์ผู้พัฒนาของ Apple และสไตล์DefaultและBlackยังคงมีอยู่ใน iOS 9 รายการที่เลิกใช้แล้วBlackOpaqueและBlackTranslucentถูกแทนที่ด้วยการผสมผสานระหว่างBlackสไตล์และกล่องกาเครื่องหมายโปร่งแสง UIBarStyle บนเว็บไซต์นักพัฒนาของ Apple
alondono

ขออภัย @alondono คุณถูกต้องแน่นอนฉันคลิกที่แถบนำทางบนตัวควบคุมทิศทางไม่อยู่ในร่างเอกสารนั่นเป็นเหตุผลว่าทำไมฉันไม่เห็นมัน สีดำที่ฉันเห็นเลิกใช้อยู่บนแถบสถานะจำลอง> - จำลอง ขอบคุณสำหรับคำตอบของคุณ
Rob85

@ Rob85 ยอดเยี่ยม! ขอบคุณสำหรับการให้ฉันรู้ว่า.
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
และฉันจะใส่รหัสนี้ได้ที่ไหน? ขออภัยสำหรับคำถามที่สมัครใหม่มี hahah
Patricio Guerra

1
รหัสสามารถวางใน - (void) วิธี viewDidLoad ของตัวควบคุมการนำทาง
pNre

2
ใน iOS 9 การตั้งค่า barTintColor เป็นสีดำจะทำให้เวลาชื่ออุปกรณ์และแบตเตอรีเป็นสีดำด้วยดังนั้นคุณจะไม่เห็น เพื่อหลีกเลี่ยงปัญหานี้แทนที่จะใช้ barTintColor ให้ใช้ self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
TheJeff

46

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

// 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
เพิ่ม[[UINavigationBar appearance] setBarTintColor:[UIColor barColor]];สำหรับ iOS 7
Samin

24

ในviewDidLoadชุด:

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

เปลี่ยน ( blueColor) เป็นสีอะไรก็ได้ที่คุณต้องการ


18

สำหรับสีแถบนำทางการเปลี่ยนที่รวดเร็ว:

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

เปลี่ยนชื่อแบบอักษร, ขนาด, สี:

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

14

ใน iOS 7 คุณต้องใช้คุณสมบัติ -barTintColor:

navController.navigationBar.barTintColor = [UIColor barColor];

13

หากคุณต้องการใช้รหัสฐานสิบหกนี่เป็นวิธีที่ดีที่สุดในการทำเช่นนั้น

ก่อนกำหนดสิ่งนี้ที่ด้านบนสุดของชั้นเรียนของคุณ:

#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]

จากนั้นใน "แอปพลิเคชันไม่เสร็จสิ้นการเปิดใช้งานด้วย" ให้ใส่สิ่งนี้:

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

วางรหัสฐานสิบหกของคุณไว้ที่ 00b0f0


1
[ลักษณะ UINavigationBar] มีประโยชน์มาก
เคน

11

หากคุณต้องการรองรับ ios6 และ ios7 คุณจะได้สีน้ำเงินที่เฉพาะเจาะจงโดยใช้สิ่งนี้ในUIViewControllerของคุณ:

- (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
บน iOS 7: -self.navigationController.navigationBar.barTintColor เป็นแถบสีและ -self.navigationController.navigationBar.tintColor เป็นสีข้อความของปุ่ม (กลับมาทำ ... )
IgniteCoders

10

มันง่ายกว่าคำตอบที่ฉันเห็นที่นี่:

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).

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


ขอบคุณฉันเปลี่ยนไปเมื่อหลายเดือนก่อนในขณะที่เล่นไปรอบ ๆ และไม่สามารถหาวิธีเปลี่ยนได้!
สมมาตร

ไม่มีปัญหาดีใจที่ฉันสามารถช่วยใครบางคน
pqsk

ฉันคิดว่านี่เป็นคำตอบที่ตรงไปตรงมาที่สุด! ขอบคุณ
Ispas Claudiu

ไม่มีปัญหา. ดีใจที่มันยังมีประโยชน์
pqsk

5

เพื่อให้โค้ดของ Rajneesh071 สมบูรณ์คุณอาจต้องการตั้งค่าสีหัวเรื่องของแถบนำทาง (และแบบอักษรหากต้องการ) เนื่องจากพฤติกรรมเริ่มต้นเปลี่ยนจาก iOS 6 เป็น 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

เพิ่มเฉพาะรหัสนี้ในของคุณViewContorller หรือของคุณAppDelegate

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

ในแอปพลิเคชั่นที่ใช้การนำทางคุณสามารถเปลี่ยนสีได้

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
การเปลี่ยนคุณสมบัติ tintColor ใน iOS7 ไม่มีผลต่อการเปลี่ยนสีพื้นหลังของแท่ง สีอ่อนใน iOS7 มีผลกับสีข้อความของ BarButtonItems เป็นต้นเท่านั้น
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

คำถามนี้และคำตอบเหล่านี้มีประโยชน์ ฉันสามารถตั้งค่าสีน้ำเงินเข้มที่ฉันต้องการnavigationBarด้วยชื่อสีขาวและข้อความปุ่มได้

แต่ฉันต้องเปลี่ยนนาฬิกาตัวส่งสัญญาณความแรงของสัญญาณ ฯลฯ ให้เป็นสีขาว สีดำไม่คมชัดเพียงพอกับสีน้ำเงินเข้ม

ผมอาจจะมองข้ามการแก้ปัญหาที่อยู่ในหนึ่งในคำตอบก่อนหน้านี้ แต่ผมก็สามารถที่จะทำให้การเปลี่ยนแปลงนั้นโดยการเพิ่มบรรทัดนี้ระดับบนสุดของฉันviewController's viewDidLoad:

[self.navigationController.navigationBar setBarStyle:UIStatusBarStyleLightContent];

UIStatusBarStyleLightContentทำงานได้ แต่ดูเหมือนว่าการแจงนับที่ถูกต้องsetBarStyle:คือUIBarStyleBlack
Collin Allen


3

สำหรับสี:

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

สำหรับรูปภาพ

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar_320X44.png"] forBarMetrics:UIBarMetricsDefault];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.