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ợ.