Thay đổi màu của nút Quay lại trong thanh điều hướng


192

Tôi đang cố gắng thay đổi màu của nút Cài đặt thành màu trắng, nhưng không thể thay đổi màu.

Tôi đã thử cả hai thứ này:

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

nhưng không thay đổi, nó vẫn giống như thế này:

nhập mô tả hình ảnh ở đây

Làm thế nào để tôi làm cho nút đó màu trắng?

Câu trả lời:


283

Bạn có thể thay đổi màu sắc toàn cầu trong bảng phân cảnh của mình bằng cách nhấp vào một khoảng trống trên bảng và chọn trên thanh công cụ bên phải "Hiển thị trình kiểm tra tệp" và bạn sẽ thấy ở dưới cùng của thanh công cụ tùy chọn "Toàn cầu màu".

Tùy chọn Global Tint trong bảng phân cảnh


7
woah .. tìm thấy tốt đẹp!. Bạn có biết làm thế nào để làm điều này lập trình?
Paul Lehn

10
Phát hiện tuyệt vời, nhưng việc thay đổi tông màu toàn cầu thành màu trắng (theo câu hỏi ban đầu) cũng sẽ thay đổi những thứ như các chỉ số tiết lộ chi tiết về chế độ xem bảng thành màu trắng, điều này sẽ khiến chúng vô hình trong bảng trong câu hỏi.
Mike Fischer

1
Thêm vào các vấn đề của Mike: điều khiển này cũng làm cho tất cả các nút văn bản của bạn có màu này và do đó bạn sẽ phải đặt chúng thành màu bằng tay (nghĩa là không có màu mặc định rõ ràng) hoặc chỉ sử dụng một phương pháp khác.
Còi báo

4
Mặc dù đây là một sửa chữa nhanh chóng và dễ dàng, nó dẫn đến các vấn đề khác nếu màu trắng / phù hợp với nền. Nếu bạn có các trường văn bản, nó làm cho con trỏ không được chú ý, điều này làm cho nó nhìn vào người dùng như thể họ không thể viết trên trường văn bản vì con trỏ không hiển thị.
Jose Ramirez

5
@PaulLehn Để thực hiện việc này theo chương trình, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)bạn có thể viết:self.window!.tintColor = .yourColor
mmika1000

205

Mã này thay đổi màu mũi tên

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

Nếu điều này không hoạt động, sử dụng mã dưới đây:

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

Swift 3 Ghi chú

UIColor.whiteColor() và tương tự đã được đơn giản hóa để UIColor.white

Ngoài ra, nhiều tùy chọn ngầm trước đây đã được thay đổi thành rõ ràng, vì vậy bạn có thể cần:

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()làm việc cho tôi (Swift 2.2)
Mike Fischer

self.navulationBar.barStyle = UIBarStyle.Black self.navlationBar.tintColor = UIColor.whiteColor () làm việc cho tôi (Swift 3)
Ajay.km

Bạn có thể giải thích tại sao nên sử dụng UIBarStyle.Black không?
mmika1000

Vui lòng cập nhật: self.navestionControll? .NavestionBar.tintColor =
mohonish

1
nó chỉ thay đổi mũi tên, văn bản trở lại vẫn giữ nguyên trong Xcode 11
jeff ayan


55

Bạn nên sử dụng cái này:

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

Điều này làm cho nút màu trắng, nhưng làm cho màu nền nhạt hơn nhiều. Bạn có biết làm thế nào để cung cấp cho nền của thanh đầy đủ màu sắc một lần nữa?
Brandon Evans

Đây là câu trả lời chính xác. Nó sẽ làm cho thanh màu tím, bằng cách đặt các nút barTintColor và các nút tiêu đề / thanh màu trắng.
zirinisp

35

Nhanh

 override func viewDidLoad() {
     super.viewDidLoad()

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

1
Sử dụng trong swift 3.
Deepak Tagadiya

cũng cho tôi biết phiên bản nhanh nào bạn có thể sử dụng?
Deepak Tagadiya

Và lớp / file / vc nào viết mã này trong dự án?
Deepak Tagadiya

Khi bắt đầu hàm setCloseButton () được gọi trên viewWillAppear.
Jayprakash Dubey

ghi vào tệp NextViewControll.swift, cũng ghi vào viewDidLoad ().
Deepak Tagadiya

20

Bạn có thể sử dụng như thế này. Đặt nó bên trong 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

Swift 4.2

Thay đổi chủ đề ứng dụng hoàn chỉnh

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Thay đổi bộ điều khiển cụ thể

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

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

nó thay đổi màu sắc cho tất cả các ứng dụng. Điều gì xảy ra nếu tôi cần thay đổi nó cho màn hình cụ thể / cụ thể UINavigationController?
Vyachaslav Gerchicov

@VyachaslavGerchicov ở trên câu trả lời là dành cho chủ đề ứng dụng hoàn chỉnh, nếu bạn muốn thay đổi bộ điều khiển cụ thể. Làm một cái gì đó như thế này: let navContoder = UINavlationContoder.init (rootViewControll: yourViewControll) navContoder.navlationBar.tintColor = .red
AiOsN

Nếu bạn đang ở trên iOS 13, bạn không sử dụng didFinishLaunchingWithOptions nữa, nó đã được chuyển sang SceneDelegate.
JBarros35

15

Trong Swift3 , Để đặt nút Quay lại thành red.

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

điều này sẽ đặt thanh điều hướng, không phải mục nút thanh
carlodonz

1
Đúng, đó là câu hỏi.
Vincent

"Thay đổi màu của nút Quay lại trong thanh điều hướng"
carlodonz

Đây là phương pháp duy nhất hiệu quả với tôi. Một cái gì đó dường như bị phá vỡ với việc triển khai của Apple ngay bây giờ ...
Dave Y

13

Trong Swift 4, bạn có thể xử lý vấn đề này bằng cách sử dụng:

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

Swift 3

Câu trả lời được đánh giá cao nhất là không chính xác cho Swift 3.

nhập mô tả hình ảnh ở đây

Mã chính xác để thay đổi màu sắc là:

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

Nếu bạn muốn thay đổi màu sắc, hãy thay đổi UIColor.white ở trên thành màu mong muốn


Đây là phương pháp duy nhất hiệu quả với tôi. Một cái gì đó dường như bị phá vỡ với việc triển khai của Apple ngay bây giờ ...
Dave Y

7

Tất cả các câu trả lời thiết lập UINavigationBar.appearance().tintColorxung đột với tài liệu của Apple trong UIAppearance.h.

Lưu ý cho iOS7: Trên iOS7, thuộc tintColortính đã được chuyển đến UIViewvà hiện có hành vi được kế thừa đặc biệt được mô tả trong UIView.h. Hành vi được kế thừa này có thể xung đột với proxy xuất hiện và do đó tintColorhiện không được phép với proxy xuất hiện.

Trong Xcode, bạn cần nhấp chuột vào từng thuộc tính bạn muốn sử dụng với proxy xuất hiện để kiểm tra tệp tiêu đề và đảm bảo thuộc tính được chú thích UI_APPEARANCE_SELECTOR.

Vì vậy, cách chính xác để tô màu thanh điều hướng màu tím và tiêu đề và các nút màu trắng trong suốt ứng dụng thông qua proxy xuất hiện là:

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

Lưu ý rằng đó UIBarButtonItemkhông phải là một lớp con của UIViewmà là NSObject. Vì vậy, tintColortài sản của nó không phải là thừa kế tintColortừ UIView.

Thật không may, UIBarButtonItem.tintColorkhông được chú thích với UI_APPEARANCE_SELECTOR- nhưng dường như đó là một lỗi tài liệu. Phản hồi từ Apple Engineering trong radar này nói rằng nó được hỗ trợ.


UINavulationBar.appparent (). LargeTitleTextAttribut = [NSAttributionString.Key.forgroundColor: UIColor.white] // cũng
Guilherme

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

Đoạn trích này làm điều kỳ diệu. Thay vì redColor, thay đổi nó như mong muốn của bạn.


6

Sử dụng mã này trong AppDelegatelớp, bên trong didFinishLaunchingWithOptions.

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

UINavigationBar.appearance().tintColor = .white

}

4

Hãy thử mã này:

 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
}

Xin cảm ơn rất nhiều, thưa ngài
Arpit B Parekh

4

sử dụng nhanh chóng 2.0

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

4

Nếu bạn đã có nút quay lại trong trình điều khiển chế độ xem "Cài đặt" và bạn muốn thay đổi màu của nút quay lại trên trình điều khiển chế độ xem "Thông tin thanh toán" sang một trình điều khiển khác, bạn có thể thực hiện điều đó trong trình điều khiển chế độ xem "Cài đặt" để phân biệt như thế này :

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               
    }
}

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Điều này hoạt động với tôi, iOS 9.0+


2

Thêm mã sau vào hàm didFinishLaunchingWithOptions trong 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()]

Mã này cho tôi lỗi sau: "Sử dụng số nhận dạng chưa được giải quyết 'ucolorFromHex'" Ai có thể giúp tôi giải quyết vấn đề đó không?
jonathan3087

có lẽ là một phần mở rộng cho UIColor. Bạn có thể tìm kiếm stackoverflow cách tạo tiện ích mở rộng.
KvdLingen

2

Đối với Swift 2.0, Để thay đổi màu sắc của thanh điều hướng , văn bản tiêu đề và màu sắc của nút quay lại đã thay đổi bằng cách sử dụng thông tin sau trong 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

Không chắc tại sao không ai đề cập đến điều này ... nhưng tôi đã làm chính xác những gì bạn đang làm trong viewDidLoad... và nó không hoạt động. Sau đó, tôi đặt mã của tôi vào viewWillAppearvà tất cả đều hoạt động.

Các giải pháp trên là thay đổi một đơn barbuttonItem. Nếu bạn muốn thay đổi màu cho mỗi navigationBar trong mã của bạn thì hãy làm theo câu trả lời này .

Về cơ bản thay đổi bản thân lớp sử dụng appearance()cũng giống như thực hiện thay đổi toàn cầu trên tất cả các trường hợp của chế độ xem đó trong ứng dụng của bạn. Để biết thêm xem tại đây


1

Bạn có một lựa chọn ẩn nút quay lại và tự thực hiện. Sau đó thiết lập màu sắc của nó.

Tôi đã làm điều đó:

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
Câu hỏi đặc biệt xoay quanh việc tạo kiểu cho mục điều hướng bên trái và đây là câu hỏi gần nhất để trả lời câu hỏi trực tiếp.
thủ công

0

Nó sẽ được giải quyết với dòng này trong - (void) viewDidLoad:

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

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

0

Bạn nên thêm dòng này

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

0

Tôi thích NavigationContaptor tùy chỉnh hơn là thiết lập ui toàn cầu, hoặc đặt trong ViewContoder.

Đây là giải pháp của tôi


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) {

  }

}

Ngoài ra, bạn không cần phải gặp rắc rối với Apple Api như EKEventEditViewControll , PickerViewControll , v.v. nếu bạn sử dụng cài đặt toàn cầu ui nhưUIBarButtonItem.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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.