tabBarItem的Badge默认样式是带数字的,但是产品要求只要一个小红点,不需要数字,这就需要我们自定义Badge了。
用Reveal分析UITabBar,发现每个按钮是一个UITabBarButton
,层级如下:
-UITabBarButton
–UITabBarSwappableImageView // 图标
–UITabBarButtonLabel // 文字
如何从UITabBar
中找到对应index的UITabBarButton
呢?我们断点调试下,可以看到可以直接从UITabBar
中用KVC取出。
实现方案如下:
- 用KVC找到UITabBarSwappableImageView,关键函数
__iconViewWithIndex
- 新建Badge,加到UITabBarSwappableImageView上
- 新建Badge的时候设置Tag,通过Tag来移除Badge
上代码
1 | static NSInteger const kBadgeViewTagBase = 10000; |