การเปลี่ยนสีของแถบนำทางใน Swift


240

ฉันใช้มุมมองตัวเลือกเพื่ออนุญาตให้ผู้ใช้เลือกชุดรูปแบบสีสำหรับแอปทั้งหมด

ฉันกำลังวางแผนที่จะเปลี่ยนสีของแถบนำทางพื้นหลังและอาจเป็นแถบแท็บ (ถ้าเป็นไปได้)

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

ตั้งค่ามุมมองตัวเลือกฉันแค่มองหารหัสเพื่อเปลี่ยนสี UI

คำตอบ:


526

แถบนำทาง:

navigationController?.navigationBar.barTintColor = UIColor.green

แทนที่ greenColor ด้วย UIColor ที่คุณต้องการคุณสามารถใช้ RGB ได้เช่นกันหากต้องการ

ข้อความแถบนำทาง:

navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.orange]

แทนที่ orangeColor ด้วยสีที่คุณชอบ

แถบแท็บ:

tabBarController?.tabBar.barTintColor = UIColor.brown

ข้อความของแถบแท็บ:

tabBarController?.tabBar.tintColor = UIColor.yellow

ในสองช่วงสุดท้ายให้แทนที่ brownColor และ yellowColor ด้วยสีที่คุณเลือก


ขอบคุณมาก! ฉันอยู่ไม่ไกลจากสิ่งที่ฉันพยายาม แต่ฉันก็ไม่ค่อยมีสิ่งที่ถูกต้อง
3746428

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

2
หลังจากอัปเดตเป็น Xcode รุ่นใหม่การตั้งค่าสีข้อความชื่อจะไม่ทำงานอีกต่อไป titleTextAttributes ไม่พร้อมใช้งานใน Swift ความคิดใด ๆ
user3746428

1
คุณสามารถเปิดคำถามใหม่และเชื่อมโยงกับมันได้หรือไม่ การแชทไม่ใช่สถานที่ที่ดีที่สุดสำหรับสิ่งนี้
trumpeter201

3
ฉันพบว่ามันทำให้ฉันใช้ NSForegroundColorAttributeName เป็นชื่อแอตทริบิวต์ แต่ก็ใช้งานได้ดี
Jake Hall

90

นี่คือการปรับแต่งลักษณะพื้นฐานบางอย่างที่คุณสามารถใช้กับแอพได้:

UINavigationBar.appearance().backgroundColor = UIColor.greenColor()
UIBarButtonItem.appearance().tintColor = UIColor.magentaColor()
//Since iOS 7.0 UITextAttributeTextColor was replaced by NSForegroundColorAttributeName
UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.blueColor()]
UITabBar.appearance().backgroundColor = UIColor.yellowColor();

ข้อมูลเพิ่มเติมเกี่ยวกับUIAppearanceAPI ใน Swift คุณสามารถอ่านได้ที่นี่: https://developer.apple.com/documentation/uikit/uiappearance


ดังนั้นฉันจะใช้สิ่งนี้เพื่อเปลี่ยนสีของแถบนำทางสำหรับแอปทั้งหมดได้อย่างไร ในขณะนี้ฉันเพิ่งมี: self.navigationController.navigationBar.barTintColor = UIColor.newBlueColor () และแน่นอนว่านี่เป็นเพียงการเปลี่ยนสีของแถบนำทางของตัวควบคุมมุมมองที่มีรหัสอยู่ภายใน ฉันจะใช้มันเพื่อเปลี่ยนแถบนำทางทั้งหมดได้อย่างไร ฉันลองใช้: UINavigationBar.appearance (). backgroundColor = UIColor.newBlueColor () แต่ดูเหมือนจะไม่ทำอะไรเลย
3746428

4
เพื่อสะท้อนให้เห็นใน app เปลี่ยนแปลงแก Entier วางด้านบนด้านล่างวิธีการของการประยุกต์ใช้ func AppDelegate.swift (แอพลิเคชัน: UIApplication, launchOptions didFinishLaunchingWithOptions: [NSObject: AnyObject]?) -> Bool {// สถานที่ดังกล่าวข้างต้นรหัส}
Badrinath

7
ใช้ barTintColor แทน backgroundColor UINavigationBar.appearance (). barTintColor = UIColor.greenColor ()
Michael Peterson

@Keenle ฉันสับสนนิดหน่อย ... ทำไมไม่เปลี่ยนสีพื้นหลังของ UINavigationBar ผ่าน API รูปลักษณ์จะเปลี่ยนสีโดยสิ้นเชิง? ผมพยายามที่จะตั้งค่าสีพื้นหลังสีฟ้าและมันทำให้ผมสีแปลก ๆ สีฟ้าสีม่วง ...
FJA

59

อัปเดตสำหรับ Swift 3, 4, 4.2, 5+

// setup navBar.....
UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

สวิฟต์ 4

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

Swift 4.2, 5+

UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false

สามารถตรวจสอบได้ที่นี่: https://github.com/hasnine/iOSUtilitiesSource


Swift 4.2: NSAttributedString.Key.foregroundColor
Kasra Babaei

การตั้งค่าสีอ่อนเป็นสีขาวแทนที่จะเป็น bartintcolor จะแสดงสีดั้งเดิม ที่ดี!
NickCoder

@NickCoder ขอบคุณ :) ตรวจสอบ lib ของฉันด้วย: github.com/hasnine/iOSUtilitiesSource
Jamil Hasnine Tamim

52
UINavigationBar.appearance().barTintColor = UIColor(red: 46.0/255.0, green: 14.0/255.0, blue: 74.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]

เพียงวางบรรทัดนี้didFinishLaunchingWithOptionsในรหัสของคุณ


ฉันลองมันด้วย RGB และมันใช้งานไม่ได้ไม่ว่าจะใส่ไว้ที่ไหน
Nathan McKaskle

@NathanMcKaskle ตรวจสอบ RGB ของคุณในรูปแบบ "xx / 250.0f"
Mohit Tomar

ใช้ในการไม่เสร็จสิ้นการเปิดใช้งานและทำงานได้อย่างสมบูรณ์แบบ Inside viewDidLoad ไม่ทำงานอย่างสมบูรณ์แบบ
Touhid

26

ภายในAppDelegateสิ่งนี้ได้เปลี่ยนรูปแบบของ NavBar ไปทั่วโลกและลบบรรทัดล่าง / เส้นขอบ (ซึ่งเป็นพื้นที่ที่มีปัญหาสำหรับคนส่วนใหญ่) เพื่อให้สิ่งที่ฉันคิดว่าคุณและคนอื่น ๆ กำลังมองหา:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().tintColor = UIColor.whiteColor()
    UINavigationBar.appearance().barTintColor = Style.SELECTED_COLOR
    UINavigationBar.appearance().translucent = false
    UINavigationBar.appearance().clipsToBounds = false
    UINavigationBar.appearance().backgroundColor = Style.SELECTED_COLOR
    UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }

จากนั้นคุณสามารถตั้งค่าไฟล์Constants.swiftและบรรจุเป็น Style Style ที่มีสีและแบบอักษร ฯลฯ จากนั้นคุณสามารถเพิ่ม tableView / pickerView ใน ViewController ใด ๆ และใช้อาร์เรย์ "availableThemes" เพื่อให้ผู้ใช้เปลี่ยน themeColor

สิ่งที่สวยงามเกี่ยวกับเรื่องนี้คือคุณสามารถใช้การอ้างอิงเดียวตลอดทั้งแอพของคุณสำหรับแต่ละสีและมันจะอัปเดตตาม "ธีม" ของผู้ใช้ที่เลือกและไม่มีค่าเริ่มต้นสำหรับ theme1 ():

import Foundation
import UIKit

struct Style {


static let availableThemes = ["Theme 1","Theme 2","Theme 3"]

static func loadTheme(){
    let defaults = NSUserDefaults.standardUserDefaults()
    if let name = defaults.stringForKey("Theme"){
        // Select the Theme
        if name == availableThemes[0]   { theme1()  }
        if name == availableThemes[1]   { theme2()  }
        if name == availableThemes[2]   { theme3()  }
    }else{
        defaults.setObject(availableThemes[0], forKey: "Theme")
        theme1()
    }
}

 // Colors specific to theme - can include multiple colours here for each one
static func theme1(){
   static var SELECTED_COLOR = UIColor(red:70/255, green: 38/255, blue: 92/255, alpha: 1) }

static func theme2(){
    static var SELECTED_COLOR = UIColor(red:255/255, green: 255/255, blue: 255/255, alpha: 1) }

static func theme3(){
    static var SELECTED_COLOR = UIColor(red:90/255, green: 50/255, blue: 120/255, alpha: 1) } ...

2
ขอบคุณชายคำตอบของคุณช่วยฉันได้อย่างน้อยสำหรับฉันฉันใช้ส่วนแรกของมันและมันยอดเยี่ยมและมีประโยชน์มาก
Ameer Fares

1
ขอบคุณมากฉันพยายามทำทุกคำตอบที่นี่และไม่มีใครทำงานได้นอกจากคุณ: D
Ronak Shah

19

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

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

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

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

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

วิธีนี้อาจใช้เพื่อจัดการสีของข้อความแถบนำทางจากกระดานเรื่องราว:

@IBInspectable var barTextColor: UIColor? {
  set {
    guard let uiColor = newValue else {return}
    navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: uiColor]
  }
  get {
    guard let textAttributes = navigationBar.titleTextAttributes else { return nil }
    return textAttributes[NSAttributedStringKey.foregroundColor] as? UIColor
  }
}

18

สวิฟท์ 4:

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

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

// MARK: Navigation Bar Customisation

// To change background colour.
UINavigationBar.appearance().barTintColor = .init(red: 23.0/255, green: 197.0/255, blue: 157.0/255, alpha: 1.0)

// To change colour of tappable items.
UINavigationBar.appearance().tintColor = .white

// To apply textAttributes to title i.e. colour, font etc.
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white,
                                                    .font : UIFont.init(name: "AvenirNext-DemiBold", size: 22.0)!]
// To control navigation bar's translucency.
UINavigationBar.appearance().isTranslucent = false

Happy Coding!



15

SWIFT 4 - การเปลี่ยนแปลงที่ราบรื่น (ทางออกที่ดีที่สุด):

หากคุณย้ายกลับจากตัวควบคุมการนำทางและคุณต้องตั้งค่าสีที่แตกต่างบนตัวควบคุมทิศทางที่คุณผลักจากที่คุณต้องการใช้

override func willMove(toParentViewController parent: UIViewController?) {
    navigationController?.navigationBar.barTintColor = .white
    navigationController?.navigationBar.tintColor = Constants.AppColor
}

แทนที่จะใส่ไว้ใน viewWillAppear ดังนั้นการเปลี่ยนภาพจะสะอาดกว่า

SWIFT 4.2

override func willMove(toParent parent: UIViewController?) {
    navigationController?.navigationBar.barTintColor = UIColor.black
    navigationController?.navigationBar.tintColor = UIColor.black
}

11

ในSwift 4

คุณสามารถเปลี่ยนสีของแถบนำทาง เพียงใช้ข้อมูลโค้ดด้านล่างนี้viewDidLoad()

สีแถบนำทาง

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

สีข้อความของแถบการนำทาง

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

สำหรับiOS 11 Large Title Navigation Barคุณต้องใช้largeTitleTextAttributesคุณสมบัติ

self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]

9

appearance()ฟังก์ชั่นไม่เคยทำงานสำหรับฉัน ดังนั้นฉันชอบที่จะสร้างวัตถุ NC และเปลี่ยนคุณสมบัติ

var navBarColor = navigationController!.navigationBar
navBarColor.barTintColor =
    UIColor(red:  255/255.0, green: 0/255.0, blue: 0/255.0, alpha: 100.0/100.0)
navBarColor.titleTextAttributes =
    [NSForegroundColorAttributeName: UIColor.whiteColor()]

นอกจากนี้หากคุณต้องการเพิ่มภาพแทนที่จะเป็นเพียงแค่ข้อความก็ใช้งานได้เช่นกัน

var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 70, height: 70))
imageView.contentMode = .ScaleAspectFit

var image = UIImage(named: "logo")
imageView.image = image
navigationItem.titleView = imageView

ด้วยวิธีนี้ฉันสามารถเปลี่ยน self.navigationController? .navigationBar.topItem? .title color ได้ ขอบคุณ.
oguzhan


4

iOS 8 (รวดเร็ว)

let font: UIFont = UIFont(name: "fontName", size: 17)   
let color = UIColor.backColor()
self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName: color], forState: .Normal)

4

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

Swift 3.0, XCode 8.1 เวอร์ชั่น

navigationController.navigationBar.barTintColor = UIColor.green

ข้อความแถบนำทาง:

navigationController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

เป็นการพูดที่มีประโยชน์มาก


4

อัพเดต Swift 4, iOS 12 และ Xcode 10

เพียงแค่ใส่หนึ่งบรรทัดภายใน viewDidLoad()

navigationController?.navigationBar.barTintColor = UIColor.red

3

ในสวิฟต์ 2

สำหรับการเปลี่ยนสีในแถบนำทาง

navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

สำหรับการเปลี่ยนสีในแถบการนำทางรายการ

navigationController?.navigationBar.tintColor = UIColor.blueColor()

หรือ

navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]

3

สวิฟท์ 3

UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 51/255, green: 90/255, blue: 149/255, alpha: 1)

นี่จะเป็นการตั้งค่าสีแถบนำทางของคุณเช่นสีแถบ Facebook :)


3

Swcode 3 และ Swift 4 ที่รองรับ Xcode 9

ทางออกที่ดีกว่าสำหรับสิ่งนี้เพื่อสร้างคลาสสำหรับแถบการนำทางทั่วไป

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

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

import UIKit

   class NabigationBar: UINavigationBar {
      required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
    commonFeatures()
 }

   func commonFeatures() {

    self.backgroundColor = UIColor.white;
      UINavigationBar.appearance().titleTextAttributes =     [NSAttributedStringKey.foregroundColor:ColorConstants.orangeTextColor]

 }


  }

2

iOS 10 Swift 3.0

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

สำหรับ UINavigationBar

    neraida.navigation.background.color.hexColor("54ad00", isTranslucent: false, viewController: self)
    
    //Change navigation title, backbutton colour
    
    neraida.navigation.foreground.color.uiColor(UIColor.white, viewController: self)
    
    //Change navigation back button title programmatically
    
    neraida.navigation.foreground.backButtonTitle("Custom Title", ViewController: self)
    
    //Apply Background Image to the UINavigationBar
    
    neraida.navigation.background.image("background", edge: (0,0,0,0), barMetrics: .default, isTranslucent: false, viewController: self)

2

สวิฟท์ 3

ซับง่ายหนึ่งที่คุณสามารถใช้ ViewDidLoad()

//Change Color
    self.navigationController?.navigationBar.barTintColor = UIColor.red
//Change Text Color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

2

รุ่นนี้ยังลบ 1px shadow line ภายใต้แถบการนำทางด้วย:

Swift 5: ใส่สิ่งนี้ลงใน AppDelegate ของคุณได้เสร็จสิ้นการเปิดใช้งานด้วยตัวเลือก

UINavigationBar.appearance().barTintColor = UIColor.black
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
UINavigationBar.appearance().shadowImage = UIImage()

1

ฉันต้องทำ

UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().barStyle = .Black
UINavigationBar.appearance().backgroundColor = UIColor.blueColor()

มิฉะนั้นสีพื้นหลังจะไม่เปลี่ยน


1

ก่อนอื่นให้ตั้งค่าคุณสมบัติ isTranslucent ของ NavigationBar เป็น false เพื่อให้ได้สีที่ต้องการ จากนั้นเปลี่ยนแถบการนำทางแถบสีเช่นนี้:

@IBOutlet var NavigationBar: UINavigationBar!

NavigationBar.isTranslucent = false
NavigationBar.barTintColor = UIColor (red: 117/255, green: 23/255, blue: 49/255, alpha: 1.0)

1

ตรวจสอบให้แน่ใจว่าได้ตั้งสถานะปุ่มสำหรับ. ปกติ

extension UINavigationBar {

    func makeContent(color: UIColor) {
        let attributes: [NSAttributedString.Key: Any]? = [.foregroundColor: color]

        self.titleTextAttributes = attributes
        self.topItem?.leftBarButtonItem?.setTitleTextAttributes(attributes, for: .normal)
        self.topItem?.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .normal)
    }
}

PS iOS 12, Xcode 10.1


1
ขอบคุณ. ฉันค้นหาtopItemวิธีแก้ปัญหานี้หลายชั่วโมง มันน่าผิดหวังกับจำนวนการเปลี่ยนแปลงที่ Apple ยังคงดำเนินต่อไปเกี่ยวกับลักษณะการนำไปใช้กับการนำทาง
แอพ Dev Guy

1

เพียงเรียกส่วนขยายนี้และส่งสีซึ่งจะเปลี่ยนสีของแถบนำทางโดยอัตโนมัติ

extension UINavigationController {

     func setNavigationBarColor(color : UIColor){
            self.navigationBar.barTintColor = color
        }
    }

ในมุมมองการโหลดหรือในมุมมองจะปรากฏขึ้นโทร

self.navigationController? .setNavigationBarColor (สี: <# T ## UIColor #>)


1

ลองสิ่งนี้ใน AppDelegate:

//MARK:- ~~~~~~~~~~setupApplicationUIAppearance Method
func setupApplicationUIAppearance() {

    UIApplication.shared.statusBarView?.backgroundColor = UIColor.clear

    var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    UINavigationBar.appearance().barTintColor =  UIColor.white
    UINavigationBar.appearance().isTranslucent = false

    let attributes: [NSAttributedString.Key: AnyObject]

    if DeviceType.IS_IPAD{
        attributes = [
            NSAttributedString.Key.foregroundColor: UIColor.white,
            NSAttributedString.Key.font: UIFont(name: "HelveticaNeue", size: 30)
            ] as [NSAttributedString.Key : AnyObject]
    }else{
        attributes = [
            NSAttributedString.Key.foregroundColor: UIColor.white
        ]
    }
    UINavigationBar.appearance().titleTextAttributes = attributes
}

iOS 13

func setupNavigationBar() {
    //        if #available(iOS 13, *) {
    //            let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
    //            let statusBar = UIView(frame: window?.windowScene?.statusBarManager?.statusBarFrame ?? CGRect.zero)
    //            statusBar.backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1) //UIColor.init(hexString: "#002856")
    //            //statusBar.tintColor = UIColor.init(hexString: "#002856")
    //            window?.addSubview(statusBar)
    //            UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    //            UINavigationBar.appearance().barTintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    //            UINavigationBar.appearance().isTranslucent = false
    //            UINavigationBar.appearance().backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1)
    //            UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
    //        }
    //        else
    //        {
    UIApplication.shared.statusBarView?.backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1)
    UINavigationBar.appearance().tintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    UINavigationBar.appearance().barTintColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    UINavigationBar.appearance().isTranslucent = false
    UINavigationBar.appearance().backgroundColor = #colorLiteral(red: 0.2784313725, green: 0.4549019608, blue: 0.5921568627, alpha: 1)
    UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
    //        }
}

ส่วนขยาย

extension UIApplication {

var statusBarView: UIView? {
    if responds(to: Selector(("statusBar"))) {
        return value(forKey: "statusBar") as? UIView
    }
    return nil
}}

1

ฉันกำลังเขียนสิ่งนี้สำหรับผู้ที่ยังคงมีปัญหากับการแก้ปัญหาที่นี่

ฉันใช้ Xcode เวอร์ชัน 11.4 (11E146) คนที่ทำงานให้ฉันคือ:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.tintColor = UIColor.black

แต่ถ้าคุณตั้งค่า barTintColor ในสตอรีบอร์ดให้เป็นค่าอื่นใดนอกจาก "default" โค้ด 2 บรรทัดนี้จะไม่มีผลใด ๆ

ดังนั้นระวังและตั้งกลับเป็น barTintColor เริ่มต้นใน Storyboard โอ้ Apple ...


ยังคงเป็นปัญหาเดียวกันแม้จะเปลี่ยนสีอ่อนเป็นค่าเริ่มต้น :(
marika.daboja

@ marika.daboja ตัวควบคุมการนำทางทั้งหมดของคุณในกระดานเรื่องราวถูกตั้งค่าเป็นสีเริ่มต้นหรือไม่
Tomas Cordoba

สวัสดีฉันมี 1 ตัวควบคุมทิศทางเท่านั้น (บวกกับตัวควบคุมมุมมองตาราง 2 ตัว) แถบควบคุมการนำทางสีโทนอ่อนถูกตั้งค่าเป็น 'ค่าเริ่มต้น' รหัสฉันต้องอัปเดตสีนี้ดูเหมือนว่าจะไม่มีผลกับมัน
marika.daboja

@ marika.daboja ตรวจสอบให้แน่ใจว่า navigationController ไม่เป็นศูนย์ และคุณใส่โค้ดนี้ใน viewDidLoad ()
Tomas Cordoba

0

เพิ่มบรรทัดเหล่านี้ไปยัง AppDelegate ภายในของคุณฟังก์ชั่น didFinishLaunchingWithOptions:

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

UINavigationBar.appearance().barTintColor = .orange

บรรทัดนี้คือถ้าคุณไม่ได้เป็นโปร่งแสงเป็นเท็จมันจะแสดงสีขาวในการนำทาง

UINavigationBar.appearance().tintColor = .white

บรรทัดนี้ใช้สำหรับข้อความและไอคอนของคุณบนแถบนำทาง

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: Styles.textFirstColor]

บรรทัดนี้เราจะนำทุกสิ่งลงสู่แถบนำทางของคุณ

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