สีข้อความและลูกศรของแถบการนำทาง IOS 7


234

ฉันต้องการที่จะตั้งพื้นหลังป้ายจะเป็นสีดำและสีทั้งหมดภายในมันจะเป็นสีขาว

ดังนั้นฉันใช้รหัสนี้:

[[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]];

แต่ปุ่มย้อนกลับสีข้อความ , ลูกศรและปุ่มแถบได้ยังคงเริ่มต้นสีฟ้า
วิธีการเปลี่ยนสีเหล่านั้นเหมือนในภาพด้านล่าง?

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


1
ลองใช้ AppDelegate ถ้า ([self.window ตอบสนองต่อ SelectSelector: @selector (setTintColor :)]) self.window.tintColor = [UIColor whiteColor];
Evgeniy S


น่าสนใจรหัสของคุณใช้งานได้ดีสำหรับฉัน (แค่ต้องการเปลี่ยนสีข้อความเป็นสีขาว) ขอบคุณ!
William T. Mallard

สีน้ำเงินที่คุณใช้คืออะไร ดูดี!
ebi

@ebi บางคนไม่ชอบแบ่งปัน เพียงแค่ใช้เครื่องมือเลือกสีเพื่อเลือกมัน หรือ .... ไปแล้ว: RGB: (18, 60, 133)
pnizzle

คำตอบ:


753

พฤติกรรมจากบางส่วนของคุณสมบัติของUINavigationBarได้เปลี่ยนจากiOS 7 คุณสามารถเห็นในภาพที่แสดงด้านล่าง:

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


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

  1. iOS 7 UI คู่มือการเปลี่ยน
  2. วิธีการอัปเดตแอปสำหรับ iOS 7

เอกสาร AppleสำหรับbarTintColorพูดว่า:

สีนี้จะทำให้โปร่งแสงโดยค่าเริ่มต้นเว้นแต่คุณจะตั้งค่าคุณสมบัติโปร่งแสงเป็น NO

รหัสตัวอย่าง:

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

ฉันลองแล้ว: self.nav.navigationBar.tintColor = [UIColor whiteColor]; self.nav.navigationBar.barTintColor = [UIColor colorWithRed: 6.0 / 255.0 สีเขียว: 12.0 / 255.0 สีน้ำเงิน: 19.0 / 255.0 อัลฟา: 1.0]; แต่ทุกอย่างยังคงเป็นสีฟ้า
1110

2
ฉันอ่านมาก่อน แต่การเปลี่ยนแปลงนี้มีเฉพาะข้อความเท่านั้นไม่ใช่และลูกศร มันยังคงเป็นสีฟ้า :(
1110

1
@ 1110: ดูที่: การใช้สี
อ่อน

2
@Chelsea: แล้วสายนี้ล่ะ? :[self.navigationController.navigationBar setTitleTextAttributes:@{[UIFont fontWithName:@"YOURFONT" size:14], NSFontAttributeName}];
Bhavin

4
อย่าลืมว่าคุณสามารถเปลี่ยนโทนสีให้กับแอพทั้งหมดได้ในแอพตัวแทน: [[ลักษณะของ UINavigationBar] setTintColor: [UIColor blackColor]];
simon_smiley

85

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

อันนี้ใช้เวลาประมาณครึ่งวันในการคิด แต่นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน ภายใน rootViewController ที่เริ่มต้น navigationController ฉันใส่รหัสนี้ในวิธีการของฉัน viewAppid:

//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]];

โพสต์แบบเต็มของฉันเกี่ยวกับเรื่องนี้ที่นี่


1
หากคุณมีปัญหาในการเปลี่ยนสีของลูกศรย้อนกลับตัวอย่างนี้จะแก้ไขปัญหา อย่างน้อยที่สุดคุณจะต้องเพิ่มบรรทัดสุดท้ายของรหัสใน rootViewController ที่แท้จริงของคุณ
russes

ใช่จอห์น เมื่อวานนี้ฉันก็สิ้นเปลืองชั่วโมงนี้เช่นกัน ปัญหาหนึ่ง (ปัญหาใหญ่) คือเอกสารนั้นแย่มากในการชี้ให้เห็นคุณลักษณะทั้งหมดที่เป็นไปได้ ความคิดใดที่พวกเขาอาจจะถูกระบุไว้? TY
Alex Zavatone

ขอบคุณ @john มันทับสีที่กำหนดเองของฉันคุณช่วยอธิบายหน่อยได้ไหมว่าทำไม?
Vaibhav Limbani

ฉันคิดว่าคุณควรสร้างคำถามใหม่ ฉันไม่สามารถบอกคุณได้ว่าทำไมถ้าฉันไม่เห็นรหัสของคุณและสิ่งที่คุณกำลังทำ @MacGeek
John Riselvato

3
ขอบคุณมันใช้งานได้ :) แต่ UITextAttributeTextColor เลิกใช้แล้วใน iOS 7 ตอนนี้คุณควรใช้ NSForegroundColorAttributeName
YYamil

37

Swift3, iOS 10

ในการกำหนดสีทั่วโลกใน 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

คำตอบของ Vin ทำได้ดีมากสำหรับฉัน นี่คือทางออกเดียวกันสำหรับนักพัฒนา C # ที่ใช้ 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;

ไม่ทราบว่าคุณสามารถตั้งค่า SetTitleTextAttributes วิธีที่คุณทำ
แบรดมัวร์

12

Swift / iOS8

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

3
ให้ textAttributes = NSMutableDictionary (ความจุ: 1) ตอนนี้การเรียกที่ถูกต้องสำหรับการเริ่มต้น NSMutableDictionary
juliensaad

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

1
ฉันชอบวิธีการนี้เนื่องจากคุณสามารถตั้งค่านี้ใน AppDelegate และใช้พร็อกซีลักษณะที่ปรากฏ
Niyog Ray

8

เพื่อเปลี่ยนสีของUINavigationBarชื่อวิธีที่ถูกต้องใช้รหัสนี้:

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

UITextAttributeTextColorถูกเลิกใช้ใน ios 7 เวอร์ชันล่าสุด ใช้NSForegroundColorAttributeNameแทน


5

หากคุณต้องการเปลี่ยนขนาดตัวอักษรหัวเรื่องและสีตัวอักษรคุณจะต้องเปลี่ยน NSDictionary titleTextAttributesสำหรับวัตถุ 2 ตัว:

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

2

ฉันคิดว่าคำตอบก่อนหน้านี้ถูกต้องนี่เป็นอีกวิธีหนึ่งในการทำสิ่งเดียวกัน ฉันแบ่งปันที่นี่กับผู้อื่นในกรณีที่มันจะเป็นประโยชน์สำหรับใครบางคน นี่คือวิธีที่คุณสามารถเปลี่ยนสีข้อความ / ชื่อสำหรับ navbar ใน 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

ดูเหมือนว่าAccessibilityการควบคุมในการiOS Settingsลบล้างทุกสิ่งที่คุณพยายามทำให้เป็นปุ่มสีในแถบนำทาง ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าทั้งหมดไว้ที่ตำแหน่งเริ่มต้น (ตั้งค่าเพิ่มความคมชัดข้อความตัวหนารูปร่างปุ่ม ฯลฯ เป็นปิด) มิฉะนั้นคุณจะไม่เห็นการเปลี่ยนแปลงใด ๆ เมื่อฉันทำมันรหัสการเปลี่ยนสีทั้งหมดเริ่มทำงานตามที่คาดไว้ คุณอาจไม่จำเป็นต้องปิดพวกเขาทั้งหมด แต่ฉันไม่ได้ดำเนินการต่อไป


เกิดอะไรขึ้นกับฉัน ฉันไม่สามารถเปลี่ยนสีอ่อนของรายการปุ่มบาร์เมื่อเปิด "Bold Text" นั่นไม่ดีเลย ตอนนี้ฉันจะต้องใช้กราฟิกแทน :-(
Ken

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.