iOS Swift 仿微信小紅點(無數字)

LinXunFeng發表於2017-12-14

OC版原文連結:關於如何在每個UITabBarItem上新增提示小紅點

  • 以分類的方式實現

程式碼

UITabBar+Extenstion.swift

fileprivate let lxfFlag: Int = 666

extension UITabBar {
    // MARK:- 顯示小紅點
    func showBadgOn(index itemIndex: Int, tabbarItemNums: CGFloat = 4.0) {
        // 移除之前的小紅點
        self.removeBadgeOn(index: itemIndex)
        
        // 建立小紅點
        let bageView = UIView()
        bageView.tag = itemIndex + lxfFlag
        bageView.layer.cornerRadius = 5
        bageView.backgroundColor = UIColor.red
        let tabFrame = self.frame
        
        // 確定小紅點的位置
        let percentX: CGFloat = (CGFloat(itemIndex) + 0.59) / tabbarItemNums
        let x: CGFloat = CGFloat(ceilf(Float(percentX * tabFrame.size.width)))
        let y: CGFloat = CGFloat(ceilf(Float(0.115 * tabFrame.size.height)))
        bageView.frame = CGRect(x: x, y: y, width: 10, height: 10)
        self.addSubview(bageView)
    }
    
    // MARK:- 隱藏小紅點
    func hideBadg(on itemIndex: Int) {
        // 移除小紅點
        self.removeBadgeOn(index: itemIndex)
    }
    
    // MARK:- 移除小紅點
    fileprivate func removeBadgeOn(index itemIndex: Int) {
        // 按照tag值進行移除
        _ = subviews.map {
            if $0.tag == itemIndex + lxfFlag {
                $0.removeFromSuperview()
            }
        }
    }
}
複製程式碼

使用

// 預設4個tabbarItem
self.tabBarController?.tabBar.showBadgOn(index: 2)
// 如果不是則用這個方法
// self.tabBarController?.tabBar.showBadgOn(index: Int, tabbarItemNums: CGFloat)
複製程式碼

效果

小紅點

附上相關專案:Swift 3.0 高仿微信

相關文章