UIKitは、ビューのlayoutSubviews
またはviewWillAppear
後いつかバッジフォントを更新します。これを完全にオーバーライドするには少しのコードが必要です。バッジのフォントの変更を観察することから始めたいと思います。
tabBarItem.addObserver(self, forKeyPath: "view.badge.label.font", options: .new, context: nil)
これで、observeメソッドが呼び出されると、バッジフォントを設定しても安全です。しかし、1つのキャッチがあります。 UIKitは同じ変更を2回適用しません。この問題を回避するには、最初にバッジ属性をnilに設定してからフォントを再適用します。ただ、将来のiOSのアップデートの包み
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "view.badge.label.font" {
let badgeAttributes = [NSFontAttributeName: UIFont(name: "IRANSans", size: 14)]
tabBarItem?.setBadgeTextAttributes(nil, for: .normal)
tabBarItem?.setBadgeTextAttributes(badgeAttributes, for: .normal)
} else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}
、あなたはのtry-catchでaddObserver
をラップすることがあります。また、あなたの完了時にオブザーバーを削除することを忘れないでください!
これは、UITabBar項目のテキストを変更します... bagdeのテキストではありません:@Bogdan Ustyak – socratesss