Thanh điều hướng, màu sắc và màu văn bản tiêu đề trong iOS 8


177

Văn bản nền trong thanh trạng thái vẫn là màu đen. Làm cách nào để thay đổi màu thành màu trắng?

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

}

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

Câu trả lời:


312

Trong AppDelegate.swift, application(_:didFinishLaunchingWithOptions:)tôi đặt như sau:

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]

(Dành cho Swift 4 hoặc sử dụng sớm hơn NSAttributedStringKeythay vì NSAttributedString.Key)

Đối với titleTextAttributes, các tài liệu nói:

Bạn có thể chỉ định phông chữ, màu văn bản, màu bóng văn bản và bù bóng văn bản cho tiêu đề trong từ điển thuộc tính văn bản


6
Điều gì nếu chúng ta có thanh điều hướng mutipl?
sumit

6
tintColor không hoạt động cho Xcode 7.3.1. Chữ vẫn đen.
triiiiista

1
Trong Xcode 8.2, titleTextAttribution không tự động hoàn thành nhưng nó hoạt động.
okysabeni

barTintColor vẫn cần thiết chứ? xóa dòng đó vẫn hoạt động
rgkobashi

122

Tôi thích câu trả lời của Alex. Nếu bạn muốn một cái gì đó nhanh chóng để thử trong một ViewControllerđảm bảo bạn sử dụng

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
}

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


Nhưng tôi đang sử dụng iso 8.1
Saorikido

1
Tại sao lại xemWillAppear ()? Tôi đang làm điều này trong viewDidLoad và nó hoạt động tốt.
Adam Johns

4
Bởi vì mỗi khi bạn xem UIView bạn muốn đặt nó. Nếu bạn đặt trong viewDidLoad () nói trong chế độ xem UITabBar, hãy chuyển sang một tab khác nơi nó được đặt lại, sau đó quay lại, nó sẽ bị ghi đè vì chế độ xem ban đầu chỉ được tải một lần.
FractalDoctor

2
Cập nhật cho swift 4 - NSForegroundColorAttributeNamebây giờ sẽ làNSAttributedStringKey.foregroundColor
Alan Scarpa

3
Cập nhật cho Swift 4.2: NSAttributedString.Key.foregroundColorthay vìNSForegroundColorAttributeName
Stephane Paquet

81

Để thay đổi màu sắc phổ biến, mã này nên ngồi ở NavigationController's viewDidLoadchức năng:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Để thay đổi nó mỗi ViewControllerbạn sẽ phải tham khảo các NavigationControllertừ ViewControllervà viết dòng tương tự ở chỗ ViewController's viewWillAppearchức năng.


Làm cách nào để ghi đè Bộ điều hướng để sử dụng các phương thức này?
AG1

Bạn không ghi đè Bộ điều hướng, bạn chỉ cần sửa đổi nó trong chức năng ViewDidLoad. Tôi đã cập nhật câu trả lời của tôi ở trên.
Alex

1
Vì vậy, một nhà phát triển chỉ cần thêm NavigationContoder.swift vào không gian làm việc? Nếu vậy thì gọn gàng!
AG1

5
@ AG1 Điều này không chính xác, chỉ cần thêm một tệp mới NavigationContoder.swift là không đủ, bạn phải kết nối Bộ điều khiển Điều hướng của mình trong Storyboard vào tệp này trong Trình kiểm tra danh tính vì theo mặc định, nó sẽ sử dụng Trình kiểm tra định danh chung.
kakubei

2
Bạn cũng có thể thực hiện tất cả những điều này trong bảng phân cảnh mà không cần phải tạo bộ điều khiển điều hướng tùy chỉnh. Các thuộc tính cho Bar Tine và Style nằm ngay bên phải dưới thanh tra thuộc tính.
Markymark

31

Swift 5

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

Swift 4

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

2
Tôi nhận được: Nhập 'NSAttributionStringKey' (còn gọi là 'NSString') không có thành viên 'foregroundColor'
Alfi

Vui lòng sử dụng dưới mã cho phiên bản mới nhất xcode 10 và nhanh chóng 4.2 self.navigationController .navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]?
Bhavsang Jam

16

Để làm việc trong object -c, tôi phải đặt các dòng sau viewWillAppearvào CustomViewControll của mình.

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

Đối với Swift2.x , công việc này:

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

Đối với Swift3.x , công việc này:

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

Nhưng khi tôi quay trở lại một trình điều khiển khác, màu sắc cũng thay đổi. Bất kỳ ý tưởng về làm thế nào để ngăn chặn điều này. Tôi muốn bộ điều khiển khung nhìn chính của tôi là một màu và các màu khác.
dùng3163404

1
Tôi nghĩ bạn cũng phải đặt màu trong trình điều khiển chế độ xem mới của mình.
Niko Klausnitzer

13

Để thực hiện công việc này trong bảng phân cảnh (Trình tạo giao diện)

Với sự giúp đỡ của IBDesignable, chúng tôi có thể thêm nhiều tùy chọn hơn vào Trình tạo giao diện Trình tạo UINavigationControllervà chỉnh sửa chúng trên bảng phân cảnh. Đầu tiên, thêm mã sau vào dự án của bạn.

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

Sau đó, chỉ cần đặt các thuộc tính cho UINavestionControll trên bảng phân cảnh.

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


7

Nếu bạn muốn đặt màu sắc và màu thanh cho toàn bộ ứng dụng, có thể thêm đoạn mã sau vào AppDelegate.swift trong

 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
`

Thanh điều hướngTintColor và tintColor được đặt


6

Cập nhật với swift 4

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

6

Trong Swift5 và Xcode 10

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

Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
31piy

4

Phiên bản Swift 4.2 của câu trả lời của Albert-

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]

Tôi thực sự thích cách bạn thêm câu trả lời này. .barTintColor không phải là một lựa chọn bây giờ. Ý bạn là .backgroundColor?
Ben

4

Đặt màu văn bản của tiêu đề thanh điều hướng thành màu trắng trong Swift phiên bản 4.2:

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

3

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

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

3

Swift 4.1

Thêm một chức năng để xemDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

Trong setup()hàm thêm:

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

Để tùy chỉnh màu TitleTexttại NavigationBar, đây là mã đơn giản và ngắn gọn cho Swift 3:

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

hoặc là

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

1

trong Swift 4.2

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

1

Swift up qua Swift 3.2 (không phải Swift 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

Trong Swift 3, công việc này:

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

0

Swift 5.1

Chỉ sao chép và dán vào ViewDidLoad()và thay đổi kích thước và kích thước của nó theo nhu cầu của bạn. Trước khi sao chép và dán thêm Thanh điều hướng lên trên Màn hình.

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

Nếu nó không hoạt động thì bạn có thể thử chỉ thay đổi màu văn bản của nó

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
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.