在我的项目中,我使用UIImage的一个扩展来创建更改选项卡栏项的选定背景颜色:
extension UIImage {
func imageWithColor(tintColor: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let context = UIGraphicsGetCurrentContext() as CGContextRef!
CGContextTranslateCTM(context, 0, self.size.height)
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, CGBlendMode.Normal)
let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
CGContextClipToMask(context, rect, self.CGImage)
tintColor.setFill()
CGContextFillRect(context, rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
UIGraphicsEndImageContext()
return newImage
}
func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, 0)
color.setFill()
UIRectFill(CGRectMake(0, 0, 100, 100))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
然后在我的MainTabBarController中使用它
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let itemIndex = 0
let bgColor = UIColor(red: 194/255.0, green: 39/255.0, blue: 65/255.0, alpha: 1.0)
let itemWidth = tabBar.frame.width / CGFloat(tabBar.items!.count)
let frame = CGRectMake(CGFloat(itemWidth) * CGFloat(itemIndex), 0, itemWidth, tabBar.frame.height)
let bgView = UIView(frame: frame)
bgView.backgroundColor = bgColor
tabBar.insertSubview(bgView, atIndex: 0)
for item in self.tabBar.items as [UITabBarItem]! {
if let image = item.image {
item.image = image.imageWithColor(UIColor.whiteColor()).imageWithRenderingMode(.AlwaysOriginal)
}
// Sets the default color of the icon of the selected UITabBarItem and Title
UITabBar.appearance().tintColor = UIColor.whiteColor()
// Sets the default color of the background of the UITabBar
UITabBar.appearance().barTintColor = UIColor(red: 39/255.0, green: 39/255.0, blue: 39/255.0, alpha: 1.0)
// Sets the background color of the selected UITabBarItem (using and plain colored UIImage with the width = 1/5 of the tabBar (if you have 5 items) and the height of the tabBar)
print(UITabBar.appearance().selectionIndicatorImage)
UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor(red: 21/255.0, green: 21/255.0, blue: 21/255.0, alpha: 1.0), size: CGSizeMake(tabBar.frame.width/4, tabBar.frame.height))
}
// Do any additional setup after loading the view.
}
这是可行的,但我如何更改为个别选项卡栏项目选择的背景颜色?
7条答案
按热度按时间xoefb8l81#
将此添加到应用程序:didFinishLaunchingWithOptions:
添加一个helper函数以将UIColor转换为UIImage
您可以将此代码放在AppDelegate或其他任何位置:
ngynwnxp2#
我找到了解决方法,无需添加其他图像
在结果中,我可以设置所选选项卡
的背景颜色
bvjveswy3#
如何更改单个选项卡栏项目的选定背景颜色
选项卡栏项没有“选定的背景色”。它们有一个
selectedImage
,您 * 可以 * 设置它。通过将其设置为呈现模式为.AlwaysOriginal
的图像,您可以指定整个选项卡栏项图像在被选中时的外观,而不是在未被选中时的外观。ih99xse14#
我给你一个最完美和最简单的方法(开个玩笑)。你可以在AppDelegate中设置TabBar外观的selectionIndicatorImage为默认值,如下所示:
我不得不调整图片的大小,以正确的宽度,因为我有3个标签,我需要划分屏幕宽度为3当然。如果你不这样做,图像将不会填写您的标签项的宽度。* 我张贴在我的博客 *:D
643ylb085#
在Swift 5中
qnyhuwrf6#
一个好的方法是使用AlamofireImage库并根据需要调整图像大小,然后在UITabBarViewController类的viewDidLoad方法中设置它:
tyg4sfes7#
我找到的最简单的方法。
快速4