วิธีเปลี่ยนสีพื้นหลัง UINavigationBar จาก AppDelegate


91

ฉันรู้วิธีเปลี่ยนUINavigationBarภาพพื้นหลังด้วยการทำ

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

และฉันรู้วิธีตั้งค่าแถบเป็นสีต่างๆภายในแต่ละสีViews..... ตอนนี้ฉันต้องการเปลี่ยนสีพื้นหลังโดยไม่ใช้ภาพเป็นสีทึบจากapp delegate. ฉันไม่ต้องการตั้งค่าทุกครั้งจากการดูแต่ละครั้งและฉันไม่ต้องการเขียนไฟล์CGRect.

ฉันลองแล้ว [[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:33/255.0 green:34/255.0 blue:36/255.0 alpha:1.0]];แต่ใช้ไม่ได้และไม่พบรหัสที่ทำงานในแอป delegate

ใครช่วยชี้ทางที่ถูกต้องให้ฉันหน่อยได้ไหม

คำตอบ:


203

คุณสามารถใช้ได้ [[UINavigationBar appearance] setTintColor:myColor];

ตั้งแต่ iOS 7 คุณจะต้องตั้งและ[[UINavigationBar appearance] setBarTintColor:myColor];[[UINavigationBar appearance] setTranslucent:NO]

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

ขอบคุณคุณรู้วิธีลบการไล่ระดับสีเริ่มต้นสีขาวที่มาจากด้านบนเพื่อทำให้เป็นสีทึบหรือไม่?
Jonathan Thurft

1
ด้วยtintColorการไล่ระดับสีจะยังคงอยู่ หากคุณไม่ต้องการให้มีการไล่ระดับสีนี้คุณต้องซับคลาส UINavigationBar ของคุณหรือเพื่อสร้าง UIImage สำหรับลักษณะที่ปรากฏ
Seb Thiebaud

59
บน iOS 7 ที่ใช้งานไม่ได้ฉันต้องใช้navigationBar.barTintColor = myColor;
Juan de la Torre

4
translucentไม่สามารถตั้งค่าคุณสมบัติโดยใช้ UIAppearance ใน iOS 6 และ iOS 7 ได้ดังนั้น[[UINavigationBar appearance] setTranslucent:NO]จะทำให้แอปมีNSInvalidArgumentExceptionข้อผิดพลาด ใช้[self.navigationController.navigationBar setTranslucent:NO]หรือยกเลิกการเลือกความโปร่งใสโดยใช้ IB
แซม

1
Swift Version: UINavigationBar.appearance().barTintColor = myColor UINavigationBar.appearance().isTranslucent = false
fl034

103

หากต้องการเปลี่ยนสีพื้นหลังและไม่ใช้สีส่วนรหัสต่อไปนี้จะใช้ได้:

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

3
นี่ควรเป็นคำตอบที่ได้รับการยอมรับทำงานได้อย่างสมบูรณ์แบบสำหรับ iOS7
joshuahornby10

คำตอบที่ถูกต้องสำหรับ iOS 7 ทำงานให้ฉัน
LondonGuy

ความโปร่งแสงเป็นข้อกำหนดในการทำงานนี้ เนื่องจากคำตอบที่ได้รับการยอมรับไม่รวมถึงสิ่งนี้จึงควรเป็นคำตอบที่ยอมรับ
Tristan Warner-Smith

3
เพียงเพื่อชี้แจงคำตอบที่ยอมรับคือสำหรับ AppDelegate และสิ่งนี้มีไว้สำหรับภายใน View Controller
คณบดี

@ ดีนพูดถูก คำตอบที่ได้รับการยอมรับจะมีผลสำหรับการสร้างใหม่UIViewControllersในขณะที่คำตอบนี้จะแสดงเอฟเฟกต์ทุกครั้งที่มีการเรียก
aramusss




6

คุณสามารถทำได้อย่างง่ายดายด้วย Xcode 6.3.1 เลือก NavigationBar ของคุณในโครงร่างเอกสาร เลือกตัวตรวจสอบคุณสมบัติ ยกเลิกการเลือกโปร่งแสง ตั้งค่า Bar Tint เป็นสีที่คุณต้องการ เสร็จแล้ว!


ขอบคุณฉันพบข้อมูลอ้างอิงมากมายเกี่ยวกับวิธีการทำสิ่งนี้ใน ObjC และรวดเร็ว แต่ไม่มีใครพูดถึงมันใน IB
Nick

3

ตามที่คำตอบอื่น ๆ กล่าวถึงคุณสามารถใช้ได้setTintColor:แต่คุณต้องการสีทึบและไม่สามารถตั้งค่า AFAIK สีอ่อนได้

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

ตามคำแนะนำฉันไม่ชอบที่จะ "มากเกินไป" ที่แอปมอบหมายให้กับสิ่งเหล่านี้ สิ่งที่ฉันมักจะทำคือสร้างคลาสที่ตั้งชื่อAppearanceConfigurationด้วยวิธีการสาธารณะเพียงวิธีเดียวconfigureAppearanceที่ฉันตั้งค่า UIAppearance ทั้งหมดที่ฉันต้องการจากนั้นฉันเรียกเมธอดนั้นจากตัวแทนแอพ


2

คุณสามารถตั้งค่าสีพื้นหลังของ UINavigation โดยใช้รหัสนี้ในตัวควบคุมมุมมองใดก็ได้

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

2

ใน Swift 4.2 และ Xcode 10.1

คุณสามารถเปลี่ยนสีของแถบนำทางจาก AppDelegate ของคุณไปยังโปรเจ็กต์ทั้งหมดของคุณได้โดยตรง

ในการdidFinishLaunchingWithOptions launchOptions:เขียนบรรทัดด้านล่างของรหัส

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

ที่นี่

tintColor ใช้สำหรับตั้งค่าภาพพื้นหลังเช่นปุ่มย้อนกลับและภาพเส้นเมนูเป็นต้น (ดูภาพเมนูด้านซ้ายและขวาด้านล่าง)

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

หากคุณต้องการกำหนดสีของแถบนำทางของตัวควบคุมมุมมองเฉพาะให้เขียนโค้ดด้านล่าง 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

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


-1

รหัสสีเป็นปัญหาที่นี่ แทนที่จะใช้ 195/255 ให้ใช้ 0.7647 หรือ 195.f / 255.f ปัญหาคือการแปลงลูกลอยทำงานไม่ถูกต้อง ลองใช้ค่าลอยตัวที่แน่นอน

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