首页 > 解决方案 > Swift中选定的tabBar项目透明背景

问题描述

这是我有的两种颜色:

static let mainDarkBlue = UIColor(r: 40, g: 51, b: 86)
static let mainDarkBlueTransparent = UIColor(r: 40, g: 51, b: 86, a: 0.8)

我已经mainDarkBlue设置了 barTint 颜色,这很好,但是mainDarkBlueTransparent我想将它作为选定的 tabBar 项目的背景颜色。

tabBar.barTintColor = UIColor.mainDarkBlue

这很好用,但我想在我的两个项目中选择和未选择之间产生色差。
另外顺便说一句,如果有人知道如何制作所选项目的阴影,请告诉我。

标签: swiftuitabbarcontrolleruitabbaruicoloruitabbaritem

解决方案


要为选定的 tabBar-item 设置背景颜色,您可以执行以下操作:

extension UIColor {
    func image(_ size: CGSize = CGSize(width: 71, height: 48)) -> UIImage {
        return UIGraphicsImageRenderer(size: size).image { rendererContext in
            self.setFill()
            rendererContext.fill(CGRect(origin: .zero, size: size))
        }
    }
}

此扩展可用于将颜色转换为图像。然后可以将此图像用作selectionIndicatorImage.

tabBar.selectionIndicatorImage = UIColor.mainDarkBlueTransparent.image()

为了更加灵活,您还可以执行以下操作(基于 vpoltave 提供的链接):

let numberOfItems = CGFloat(tabBar.items!.count)//make sure that items isn't nil -> maybe you should use some if let or guard instead + make sure that your are executing this code after you have set the tabBarItems
let tabBarItemSize = CGSize(width: tabBar.frame.width / numberOfItems, height: tabBar.frame.height)
tabBar.selectionIndicatorImage = UIColor.mainDarkBlueTransparent.image(tabBarItemSize)

推荐阅读