2017-06-10 19 views
3

私はUITabBarを持っています。タブバー項目の値を設定しました。Swift - UITabBarItemバッジフォントを変更するには?

tabBarItem3?.badgeValue = String(self.numberOfProducts) 

ここでは、そのフォントを特定のフォントに変更したいと考えています。次に、私はこのコードを使用した:

tabBarItem3?.setBadgeTextAttributes([NSFontAttributeName: UIFont(name: "IRANSans", size: 14)], for: .normal) 

これは動作しません。私は何をすべきか?

答えて

1

スウィフト3

UITabBarItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont.systemFont(ofSize: 10)], for: .normal) 
UITabBarItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont.systemFont(ofSize: 10)], for: .selected) 
+1

これは、UITabBar項目のテキストを変更します... bagdeのテキストではありません:@Bogdan Ustyak – socratesss

2

はスウィフト3

UITabBarItem.appearance().setBadgeTextAttributes([NSFontAttributeName: UIFont(name: "IRANSans", size: 14)], for: .normal) 
UITabBarItem.appearance().setBadgeTextAttributes([NSFontAttributeName: UIFont(name: "IRANSans", size: 14)], for: .selected) 
+2

少なくともiOS 10では動作しません –

+0

[iOS 11にバグがあります](https:// openradar .appspot.com/34276488)これはiOS 10では動作しますが、iOS 11では動作しません。 – plindberg

0

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をラップすることがあります。また、あなたの完了時にオブザーバーを削除することを忘れないでください!

関連する問題