2017-07-17 19 views
6

Sau khi cập nhật lên Swift 4, tôi nhận được một lỗi biên dịch:UIAppearance Swift 4

Static member 'appearance' cannot be used on protocol metatype 'UIAppearance.Protocol'

Dưới đây là phương pháp viewWillAppear tôi trong tùy chỉnh của tôi Tab Bar điều khiển lớp con, tôi đang thiết phông chữ của văn bản mục .

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    // compiler error on line below 
    UIAppearance.appearance().setTitleTextAttributes([NSAttributedStringKey.font: font], for: UIControlState.normal) 
} 

Tôi đang gặp sự cố khi sửa lỗi này, mọi hướng dẫn sẽ được đánh giá cao, cảm ơn!

+0

Mã đó phải làm gì? Thông thường, giao diện được đặt cho lớp giao diện người dùng cụ thể, ví dụ: 'UIBarItem.appearance(). SetTitleTextAttributes ...' –

+0

Tôi sẽ cung cấp thêm ngữ cảnh trong câu hỏi. Đây là một lớp điều khiển thanh Tab tùy chỉnh, tôi đang thay đổi phông chữ của các mục thanh. –

+0

Bạn cần gọi từ lớp UI, không phải trực tiếp từ 'UIAppearance'. – dimpiax

Trả lời

7

Phải - công cụ chuyển đổi Swift 4 hiện tại (như của Xcode 9 Beta 4) bị mang đi một chút.

Tôi đã có thể khắc phục sự cố nhanh chóng bằng cách hoàn nguyên mã chuyển đổi UIAppearance, sau đó cập nhật các thuộc tính riêng lẻ.

Ví dụ, trong Swift 3 tôi đã:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .selected) 

Xcode "giúp" tôi ra bằng cách thay đổi nó để:

UIAppearance.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.white], for: .selected) 

tôi đã có thể yên lặng các lỗi bằng nửa hoàn nguyên, đến:

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.white], for: .selected) 
+0

Tương tự tại đây. Trình di chuyển đang thay đổi loại thành UIAppearance, thay vì, nói, UITabBarItem, UIImageView, v.v. – Womble

Các vấn đề liên quan