Is it possible to change UITabBarItem badge color

前端 未结 14 1639
别那么骄傲
别那么骄傲 2020-12-05 00:14

I want to change background color of UITabBarItem badge but can\'t find any resource on how to make it.

14条回答
  •  生来不讨喜
    2020-12-05 01:00

    For people using Swift, I managed to improve on TimWhiting answer in order to have the badge view working on any screen size and any orientation.

     extension UITabBarController {
    
        func setBadges(badgeValues: [Int]) {
    
            for view in self.tabBar.subviews {
                if view is CustomTabBadge {
                    view.removeFromSuperview()
                }
            }
    
            for index in 0...badgeValues.count-1 {
                if badgeValues[index] != 0 {
                    addBadge(index, value: badgeValues[index], color:UIColor(paletteItem: .Accent), font: UIFont(name: Constants.ThemeApp.regularFontName, size: 11)!)
                }
            }
        }
    
        func addBadge(index: Int, value: Int, color: UIColor, font: UIFont) {
            let badgeView = CustomTabBadge()
    
            badgeView.clipsToBounds = true
            badgeView.textColor = UIColor.whiteColor()
            badgeView.textAlignment = .Center
            badgeView.font = font
            badgeView.text = String(value)
            badgeView.backgroundColor = color
            badgeView.tag = index
            tabBar.addSubview(badgeView)
    
            self.positionBadges()
        }
    
        override public func viewDidLayoutSubviews() {
            super.viewDidLayoutSubviews()
            self.positionBadges()
        }
    
        // Positioning
        func positionBadges() {
    
            var tabbarButtons = self.tabBar.subviews.filter { (view: UIView) -> Bool in
                return view.userInteractionEnabled // only UITabBarButton are userInteractionEnabled
            }
    
            tabbarButtons = tabbarButtons.sort({ $0.frame.origin.x < $1.frame.origin.x })
    
            for view in self.tabBar.subviews {
                if view is CustomTabBadge {
                    let badgeView = view as! CustomTabBadge
                    self.positionBadge(badgeView, items:tabbarButtons, index: badgeView.tag)
                }
            }
        }
    
        func positionBadge(badgeView: UIView, items: [UIView], index: Int) {
    
            let itemView = items[index]
            let center = itemView.center
    
            let xOffset: CGFloat = 12
            let yOffset: CGFloat = -14
            badgeView.frame.size = CGSizeMake(17, 17)
            badgeView.center = CGPointMake(center.x + xOffset, center.y + yOffset)
            badgeView.layer.cornerRadius = badgeView.bounds.width/2
            tabBar.bringSubviewToFront(badgeView)
        }
    }
    
    class CustomTabBadge: UILabel {}
    

提交回复
热议问题