แถบนำทางแถบสีอ่อนและสีข้อความใน iOS 8


177

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

// io8, swift, Xcode 6.0.1 
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orangeColor()]

}

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

คำตอบ:


312

ในAppDelegate.swiftในapplication(_:didFinishLaunchingWithOptions:)ฉันใส่ต่อไปนี้:

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]

(สำหรับ Swift 4 หรือก่อนหน้านี้ใช้NSAttributedStringKeyแทนNSAttributedString.Key)

สำหรับtitleTextAttributesที่เอกสารบอกว่า:

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


6
เกิดอะไรขึ้นถ้าเรามีแถบนำทาง mutiple
sumit

6
tintColor ไม่ทำงานสำหรับ Xcode 7.3.1 ข้อความยังคงเป็นสีดำ
triiiiista

1
ใน Xcode 8.2 titleTextAttributes ไม่ได้เติมข้อความอัตโนมัติ แต่ใช้งานได้
okysabeni

barTintColor ยังคงมีความจำเป็นอยู่หรือไม่ การลบบรรทัดนั้นยังใช้งานได้
rgkobashi

122

ฉันชอบคำตอบของอเล็กซ์ หากคุณต้องการสิ่งที่รวดเร็วในการลองViewControllerใช้

viewWillAppear()
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    var nav = self.navigationController?.navigationBar
    nav?.barStyle = UIBarStyle.Black
    nav?.tintColor = UIColor.white
    nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
    //nav?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange] // swift 4.2
}

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


แต่ฉันใช้ iso 8.1
Saorikido

1
ทำไม viewWillAppear () ฉันกำลังทำสิ่งนี้ใน viewDidLoad และทำงานได้ดี
Adam Johns

4
เพราะทุกครั้งที่คุณดู UIView คุณต้องตั้งค่า หากคุณตั้งใน viewDidLoad () พูดในมุมมอง UITabBar ให้ย้ายไปที่แท็บอื่นที่ตั้งค่าไว้อีกครั้งจากนั้นกลับมามันจะถูกเขียนทับเนื่องจากมุมมองดั้งเดิมถูกโหลดเพียงครั้งเดียว
FractalDoctor

2
อัปเดตสำหรับ swift 4 - NSForegroundColorAttributeNameควรเป็นแล้วNSAttributedStringKey.foregroundColor
Alan Scarpa

3
การปรับปรุงสำหรับสวิฟท์ 4.2: NSAttributedString.Key.foregroundColorแทนNSForegroundColorAttributeName
สเตฟานปาเก้

81

ในการเปลี่ยนสีสากลรหัสนี้ควรนั่งในNavigationControllerของviewDidLoadฟังก์ชั่น:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Status bar white font
        self.navigationBar.barStyle = UIBarStyle.Black
        self.navigationBar.tintColor = UIColor.whiteColor()
    }
}

ที่จะเปลี่ยนมันต่อViewControllerคุณจะต้องอ้างอิงNavigationControllerจากViewControllerและเขียนเส้นที่คล้ายกันในที่ViewControllerของviewWillAppearฟังก์ชั่น


ฉันจะแทนที่ NavigationController เพื่อใช้วิธีการเหล่านี้ได้อย่างไร
AG1

คุณไม่ได้แทนที่ NavigationController คุณเพียงแค่ปรับเปลี่ยนในฟังก์ชั่น ViewDidLoad ฉันปรับปรุงคำตอบของฉันข้างต้น
อเล็กซ์

1
ดังนั้นผู้พัฒนาจึงต้องเพิ่ม NavigationController.swift ในพื้นที่ทำงานหรือไม่ ถ้าเป็นอย่างนั้นเรียบร้อย!
AG1

5
@ AG1 สิ่งนี้ไม่ถูกต้องเพียงแค่เพิ่มไฟล์ใหม่ NavigationController.swift ไม่เพียงพอคุณต้องเชื่อมต่อตัวควบคุมทิศทางของคุณในกระดานเรื่องราวไปยังไฟล์นี้ใน Identity Inspector เพราะโดยปกติแล้วมันจะใช้ UINavigationController ทั่วไป
kakubei

2
คุณยังสามารถทำสิ่งทั้งหมดนี้ได้ในกระดานเรื่องราวโดยไม่จำเป็นต้องสร้างตัวควบคุมการนำทางแบบกำหนดเอง คุณสมบัติของ Bar Tine and Style อยู่ที่ด้านขวาภายใต้ตัวตรวจสอบคุณสมบัติ
Markymark

31

สวิฟท์ 5

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

สวิฟต์ 4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

2
ฉันได้รับ: ประเภท 'NSAttributedStringKey' (aka 'NSString') ไม่มีสมาชิก 'foregroundColor'
Alfi

โปรดใช้รหัสด้านล่างสำหรับรุ่นล่าสุด xcode 10 และ swift 4.2 self.navigationController? .navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam

16

ในการทำงานในวัตถุประสงค์ -cฉันต้องใส่บรรทัดต่อไปนี้viewWillAppearใน CustomViewController ของฉัน

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

สำหรับSwift2.xสิ่งนี้ใช้ได้:

self.navigationController?.navigationBar.barTintColor = UIColor.redColor()

สำหรับSwift3.xสิ่งนี้ใช้ได้:

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

แต่เมื่อฉันกลับไปที่ผู้ควบคุมคอนเทนเนอร์คนอื่นสีก็เปลี่ยนไปด้วย ความคิดเกี่ยวกับวิธีการป้องกันนี้ ฉันต้องการ ViewController หลักของเราที่จะเป็นหนึ่งในสีและคนอื่น ๆ อีก
user3163404

1
ฉันคิดว่าคุณต้องตั้งค่าสีในตัวควบคุมมุมมองใหม่ของคุณ
Niko Klausnitzer

13

เมื่อต้องการทำงานนี้ในกระดานเรื่องราว (ตัวสร้างส่วนต่อประสานผู้สร้าง)

ด้วยความช่วยเหลือของIBDesignableเราสามารถเพิ่มตัวเลือกเพิ่มเติมเพื่อตัวสร้างส่วนต่อประสานตัวสร้างUINavigationControllerและปรับแต่งพวกเขาบนกระดานเรื่องราว ขั้นแรกเพิ่มรหัสต่อไปนี้ในโครงการของคุณ

@IBDesignable extension UINavigationController {
    @IBInspectable var barTintColor: UIColor? {
        set {
            navigationBar.barTintColor = newValue
        }
        get {
            guard  let color = navigationBar.barTintColor else { return nil }
            return color
        }
    }

    @IBInspectable var tintColor: UIColor? {
        set {
            navigationBar.tintColor = newValue
        }
        get {
            guard  let color = navigationBar.tintColor else { return nil }
            return color
        }
    }

    @IBInspectable var titleColor: UIColor? {
        set {
            guard let color = newValue else { return }
            navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: color]
        }
        get {
            return navigationBar.titleTextAttributes?["NSForegroundColorAttributeName"] as? UIColor
        }
    }
}

จากนั้นเพียงตั้งค่าคุณลักษณะสำหรับ UINavigationController บนกระดานเรื่องราว

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


7

หากคุณต้องการตั้งค่าสีอ่อนและสีแท่งสำหรับทั้งแอปสามารถเพิ่มรหัสต่อไปนี้ลงใน AppDelegate.swift ใน

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

    var navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
    navigationBarAppearace.barTintColor = UIColor(red:0.76, green:0.40, blue:0.40, alpha:1.0)
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
    return true
`

แถบการนำทางตั้งค่า TintColor และ tintColor


6

อัปเดตด้วย swift 4

override func viewDidLoad() {
    super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.blue
        self.navigationController?.navigationBar.barStyle = UIBarStyle.black
}

6

ใน Swift5 และ Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes

ในขณะที่ข้อมูลโค้ดนี้อาจแก้ไขคำถามรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ
31piy

4

คำตอบของ Albert's Swift 4.2

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white]

ฉันชอบวิธีที่คุณเพิ่มคำตอบนี้จริงๆ .barTintColor ไม่ใช่ตัวเลือกในขณะนี้ คุณหมายถึง. backgroundColor หรือเปล่า
Ben

4

การตั้งค่าสีข้อความของหัวเรื่องแถบนำทางเป็นสีขาวใน Swift เวอร์ชัน 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

3

สวิฟต์ 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}

3

สวิฟท์ 4.1

เพิ่ม func เพื่อดู DIDLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

ในsetup()ฟังก์ชั่นเพิ่ม:

func setup() {

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationBar.barStyle = .blackOpaque
        navigationItem.title = "YOUR_TITLE_HERE"
        navigationController?.navigationBar.barTintColor = .black
        let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
        navigationController?.navigationBar.largeTitleTextAttributes = attributes
    }

1

สำหรับสีที่กำหนดเองถึงTitleTextที่NavigationBarนี่เป็นรหัสที่ง่ายและสั้นสำหรับ Swift 3:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]

หรือ

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white]

1

ในสวิฟท์ 4.2

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

1

สวิฟท์ผ่านสวิฟท์ 3.2 (ไม่ใช่สวิฟท์ 4.0)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .always
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.largeTitleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

    // unconfirmed but I assume this works:
    self.navigationController?.navigationBar.barTintColor = UIColor.white
    self.navigationController?.navigationBar.barStyle = UIBarStyle.black

0

ในสวิฟท์ 3 งานนี้:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]

0

สวิฟท์ 5.1

เพียงคัดลอกและวางViewDidLoad()และเปลี่ยนขนาดและเป็นความต้องการของคุณ ก่อนที่จะคัดลอกและวางเพิ่มแถบนำทางที่ด้านบนของหน้าจอ

navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont(name: "TitilliumWeb-Bold.ttf", size: 16.0)!, NSAttributedString.Key.foregroundColor: UIColor.white]

ถ้ามันไม่ทำงานแล้วคุณสามารถลองเพียงเปลี่ยนสีข้อความ

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.