เปลี่ยนสีของปุ่มย้อนกลับในแถบนำทาง


194

ฉันกำลังพยายามเปลี่ยนสีของปุ่มการตั้งค่าเป็นสีขาว แต่ไม่สามารถเปลี่ยนได้

ฉันได้ลองทั้งสองอย่างนี้แล้ว:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

แต่ไม่มีการเปลี่ยนแปลงมันยังคงมีลักษณะเช่นนี้:

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

ฉันจะทำให้ปุ่มนั้นเป็นสีขาวได้อย่างไร

คำตอบ:


284

คุณสามารถเปลี่ยนสีอ่อนทั่วโลกในกระดานเรื่องราวของคุณโดยคลิกที่พื้นที่ว่างบนกระดานและเลือกในแถบเครื่องมือด้านขวา "แสดงตัวตรวจสอบไฟล์" และคุณจะเห็นตัวเลือก "Global Tint" ที่ด้านล่างของแถบเครื่องมือ

ตัวเลือก Global Tint ในกระดานเรื่องราว


7
ว้าว .. หาดี! คุณรู้วิธีการทำสิ่งนี้โดยทางโปรแกรมหรือไม่
Paul Lehn

10
การค้นพบที่ยอดเยี่ยม แต่การเปลี่ยนสีของโลกเป็นสีขาว (ตามคำถามเดิม) จะเปลี่ยนสิ่งต่าง ๆ เช่นตัวบ่งชี้การเปิดเผยรายละเอียดการดูตารางเป็นสีขาวซึ่งจะทำให้มองไม่เห็นในตารางที่เป็นปัญหา
Mike Fischer

1
การเพิ่มปัญหาของไมค์: การควบคุมนี้ทำให้ปุ่มข้อความทั้งหมดของคุณเป็นสีนี้ดังนั้นคุณจะต้องตั้งค่าให้เป็นสีด้วยมือ (เช่นไม่มีสีเริ่มต้นที่ชัดเจน) หรือใช้วิธีการอื่น
ไซเรน

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

5
@PaulLehn หากต้องการทำสิ่งนี้โดยทางโปรแกรมAppDelegate.swift > application(application:didFinishLaunchingWithOptions:)คุณสามารถเขียน:self.window!.tintColor = .yourColor
mmika1000

206

รหัสนี้จะเปลี่ยนสีของลูกศร

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

หากวิธีนี้ใช้ไม่ได้ผลให้ใช้รหัสด้านล่าง:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3 Notes

UIColor.whiteColor() และที่คล้ายกันได้ง่ายขึ้นเพื่อ UIColor.white

นอกจากนี้ตัวเลือกโดยนัยก่อนหน้านี้จำนวนมากได้ถูกเปลี่ยนเป็นชัดเจนดังนั้นคุณอาจต้องการ:

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()ทำงานให้ฉัน (Swift 2.2)
Mike Fischer

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () ทำงานให้ฉัน (สวิฟท์ 3)
Ajay.km

คุณสามารถอธิบายได้ว่าทำไมถึงใช้ UIBarStyle.Black
mmika1000

โปรดอัปเดต: self.navigationController?
.navigationBar.tintColor

1
มันเปลี่ยนลูกศรข้อความกลับยังคงเหมือนเดิมใน Xcode 11
jeff ayan


56

คุณควรใช้สิ่งนี้:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

นี่ทำให้ปุ่มเป็นสีขาว แต่ทำให้สีพื้นหลังจางลงมาก คุณรู้วิธีการให้พื้นหลังของแถบสีเต็มรูปแบบอีกครั้งหรือไม่
Brandon Evans

นี่คือคำตอบที่ถูกต้อง มันจะทำให้แถบสีม่วงโดยการตั้งค่า barTintColor และปุ่มชื่อ / แถบสีขาว
zirinisp

36

รวดเร็ว

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

1
ใช้งานได้อย่างรวดเร็ว 3
Deepak Tagadiya

ยังบอกฉันว่ารุ่นรวดเร็วคุณสามารถใช้?
Deepak Tagadiya

และ class / file / vc ในการเขียนรหัสนี้ในโครงการ?
Deepak Tagadiya

ที่จุดเริ่มต้นของฟังก์ชัน setCloseButton () ซึ่งเรียกใช้บน viewWillAppear
Jayprakash Dubey

เขียนในไฟล์ NextViewController.swift และเขียนใน viewDidLoad ()
Deepak Tagadiya

20

คุณสามารถใช้สิ่งนี้ AppDelegate.swiftวางไว้ภายใน

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

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }

20

สวิฟท์ 4.2

เปลี่ยนธีมแอพที่สมบูรณ์

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

เปลี่ยนคอนโทรลเลอร์เฉพาะ

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)

มันเปลี่ยนสีสำหรับแอปพลิเคชันทั้งหมด ถ้าฉันต้องเปลี่ยนหน้าจอโดยเฉพาะอย่างยิ่ง / โดยเฉพาะอย่างยิ่งUINavigationController?
Vyachaslav Gerchicov

@VyachaslavGerchicov คำตอบข้างต้นสำหรับธีมแอพที่สมบูรณ์หากคุณต้องการเปลี่ยนคอนโทรลเลอร์เฉพาะ ทำอะไรเช่นนี้: ให้ navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
AiOsN

หากคุณใช้ iOS 13 คุณไม่ได้ใช้ FinishLaunchingWithOptions อีกต่อไปมันจะถูกย้ายไปที่ SceneDelegate
JBarros35

15

ในSwift3 , redการตั้งค่าปุ่มย้อนกลับเพื่อ

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

สิ่งนี้จะตั้งค่าแถบนำทางไม่ใช่รายการปุ่มบาร์
carlodonz

1
ใช่นั่นคือคำถาม
Vincent

"เปลี่ยนสีของปุ่มย้อนกลับในแถบการนำทาง"
carlodonz

นี่เป็นวิธีเดียวที่ใช้ได้สำหรับฉัน ดูเหมือนจะมีบางอย่างขัดข้องกับการใช้งานของ Apple ในขณะนี้ ...
Dave Y

13

ใน Swift 4 คุณสามารถดูแลปัญหานี้ได้โดยใช้:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

8

สวิฟท์ 3

คำตอบที่ upvoted ที่สุดไม่ถูกต้องสำหรับ Swift 3

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

รหัสที่ถูกต้องในการเปลี่ยนสีคือ:

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

หากคุณต้องการเปลี่ยนสีให้เปลี่ยน UIColor.white ด้านบนเป็นสีที่ต้องการ


นี่เป็นวิธีเดียวที่ใช้ได้สำหรับฉัน ดูเหมือนจะมีบางอย่างขัดข้องกับการใช้งานของ Apple ในขณะนี้ ...
Dave Y

7

ทุกคำตอบการตั้งค่าความขัดแย้งกับเอกสารในแอปเปิ้ลUINavigationBar.appearance().tintColorUIAppearance.h

หมายเหตุสำหรับ iOS7: บน iOS7 tintColorคุณสมบัติได้ย้ายไปและตอนนี้มีพฤติกรรมที่สืบทอดมาเป็นพิเศษที่อธิบายไว้ในUIView UIView.hพฤติกรรมที่สืบทอดนี้อาจขัดแย้งกับลักษณะที่ปรากฏของพร็อกซีดังนั้นจึงtintColorไม่ได้รับอนุญาตในขณะนี้กับพร็อกซีลักษณะที่ปรากฏ

ใน Xcode UI_APPEARANCE_SELECTORคุณจะต้องคำสั่งคลิกที่คุณสมบัติที่คุณต้องการที่จะใช้กับพร็อกซี่ปรากฏตัวในการตรวจสอบไฟล์ส่วนหัวและแต่ละให้แน่ใจว่าคุณสมบัติถูกกำกับด้วย

ดังนั้นวิธีที่ถูกต้องในการระบายสีแถบการนำทางสีม่วงและชื่อและปุ่มสีขาวตลอดทั้งแอปผ่านทางพร็อกซีลักษณะที่ปรากฏคือ:

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

โปรดทราบว่าUIBarButtonItemไม่ได้เป็น subclass ของแต่UIView NSObjectเพื่อให้tintColorสถานที่ให้บริการไม่ได้รับมรดกมาจากtintColorUIView

น่าเสียดายที่UIBarButtonItem.tintColorไม่มีคำอธิบายประกอบด้วยUI_APPEARANCE_SELECTOR- แต่ดูเหมือนว่าฉันมีข้อบกพร่องเอกสาร การตอบสนองจาก Apple Engineering ในเรดาร์นี้ระบุว่ารองรับ


UINavigationBar.appearance (). largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // ด้วย
Guilherme

6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

ตัวอย่างนี้ทำเวทย์มนตร์ แทน redColor ให้เปลี่ยนเป็นความต้องการของคุณ


6

ใช้รหัสนี้ในระดับภายในAppDelegatedidFinishLaunchingWithOptions

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}

4

ลองรหัสนี้:

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

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

ขอบคุณมากคุณ
Arpit B Parekh


4

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

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}


2

เพิ่มรหัสต่อไปนี้เพื่อdidFinishLaunchingWithOptionsฟังก์ชันในAppDelegate.swift

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]

รหัสนี้ทำให้ฉันมีข้อผิดพลาดต่อไปนี้: "การใช้ตัวระบุที่ยังไม่ได้แก้ไข 'uicolorFromHex'" ทุกคนสามารถช่วยฉันแก้ปัญหาได้หรือไม่
jonathan3087

อาจเป็นส่วนเสริมสำหรับ UIColor คุณสามารถค้นหา stackoverflow วิธีสร้างส่วนขยาย
KvdLingen

2

สำหรับสวิฟท์ 2.0 การเปลี่ยนการนำร่องบาร์โทนสี , ข้อความชื่อเรื่องและปุ่มย้อนกลับสีสีเปลี่ยนโดยใช้ต่อไปนี้ใน AppDelegate.swift

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

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}

2

ไม่แน่ใจว่าทำไมไม่มีใครพูดถึงเรื่องนี้ ... แต่ฉันทำในสิ่งที่คุณกำลังทำviewDidLoad... จากนั้นฉันก็วางโค้ดลงไปviewWillAppearและมันก็ใช้ได้ดี

วิธีการแก้ปัญหาข้างต้นคือการเปลี่ยนbarbuttonItem เดียว หากคุณต้องการเปลี่ยนสีสำหรับแถบนำทางทุกอันในรหัสของคุณให้ทำตามคำตอบนี้

โดยพื้นฐานแล้วการเปลี่ยนไปใช้คลาสนั้นappearance()ก็เหมือนกับการเปลี่ยนแปลงทั่วโลกในมุมมองทั้งหมดในแอปของคุณ ดูเพิ่มเติมที่นี่


1

คุณมีทางเลือกหนึ่งที่จะซ่อนปุ่มย้อนกลับของคุณและทำให้มันด้วยตัวเอง จากนั้นตั้งค่าสี

ฉันทำอย่างนั้น:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

1
คำถามนั้นเกี่ยวกับการออกแบบสไตล์ของรายการการนำทางด้านซ้ายโดยเฉพาะและนี่เป็นคำตอบที่ตรงที่สุด
งานฝีมือ

0

มันจะแก้ไขได้ด้วยบรรทัดนี้ใน - (เป็นโมฆะ) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro


0

ฉันชอบ NavigationController ที่กำหนดเองมากกว่าการตั้งค่า UI สากลหรือใส่ใน ViewController

นี่คือทางออกของฉัน


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

นอกจากนี้คุณไม่จำเป็นต้องยุ่งกับ Apple Api เช่นEKEventEditViewController , PickerViewControllerและอื่น ๆ หากคุณใช้การตั้งค่าระดับโลกเช่น UIUIBarButtonItem.appearance().tintColor = .white


0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.