【问题标题】:Selected tabBar item transparent background in SwiftSwift中选定的tabBar项目透明背景
【发布时间】:2020-12-27 19:34:58
【问题描述】:

我有两种颜色:

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

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

【问题讨论】:

  • 我建议您制作static let mainDarkBlueTransparent = mainDarkBlue .withAlphaComponent(0.8) 并且当您更改mainRadBlue 颜色时,您无需搜索此rgb 数字并更改其他位置。
  • 是的,你是对的。
  • 不,它没有改变。当我设置 tabbar.isTranslucent = true 时,它​​做出了很好的改变,但是如果你明白我的意思,颜色就不清楚了,当我选择标签栏项目时,它很难看,并且会产生类似小动画的东西。

标签: swift uitabbarcontroller uitabbar uicolor uitabbaritem


【解决方案1】:

要为选定的 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)

【讨论】:

  • 它只是改变了我在标签栏项目中的小图像的颜色,而不是背景颜色......
  • 我不能使用 71 和 48 作为高度和宽度,我需要标签栏的大小,但无法在扩展中捕获它们。另外,你在哪里定义了 setFill() 函数?
  • setFill()UIColor (developer.apple.com/documentation/uikit/uicolor/1621926-setfill) 内部定义。因此,您可以将整个扩展名复制到您的项目中...我再次编辑了我的问题以处理其他 tabBarItemSize(s)。
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 2023-01-27
  • 2014-01-28
  • 2020-12-19
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多