未选择选项卡时更改 UITabBarController 选项卡图标颜色

Posted

技术标签:

【中文标题】未选择选项卡时更改 UITabBarController 选项卡图标颜色【英文标题】:Change UITabBarController Tabs icons color when tab is not selected 【发布时间】:2016-07-22 07:09:21 【问题描述】:

美好的一天, 我正在使用情节提要中的 UITabBarController,并且我想将图标颜色从默认的灰色更改为白色。

我在***和其他网站上尝试了很多解决方案,但都没有用。

【问题讨论】:

能否请您提供您获取示例代码的链接 参考这个链接:- ***.com/questions/790746/… 当我再次搜索链接以获取示例代码时,我找到了解决方案,谢谢所有解决方案:***.com/questions/30664500/… 【参考方案1】:

默认选项卡色调颜色:-

Obj-C 版本:-

[[self tabBar] setTintColor:[UIColor blackColor]];

Swift 2.2 版本:-

self.tabBar.tintColor = UIColor.whiteColor()

选定的选项卡色调颜色:-

Obj-C 版本:-

[[self tabBar] setSelectedImageTintColor:[UIColor blueColor]]; 

Swift2.2 版本:-

self.tabBar.selectedImageTintColor = UIColor.blueColor()

【讨论】:

Default tint color 的代码没有效果,第二个代码,对于选定的标签颜色,效果很好,但该功能已弃用【参考方案2】:

我找到了使用这个循环的解决方案

for(UITabBarItem *item in self.tabBar.items) 
        // use the UIImage category code for the imageWithColor: method
        item.image = [[[item selectedImage] imageWithColor:[UIColor redColor]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];


    

UITabBarController 类中。 并且应该添加包含方法imageWithColorUIImage+Overlay

- (UIImage *)imageWithColor:(UIColor *)color1

    UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, 0, self.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextSetBlendMode(context, kCGBlendModeNormal);
    CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
    CGContextClipToMask(context, rect, self.CGImage);
    [color1 setFill];
    CGContextFillRect(context, rect);
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;

【讨论】:

【参考方案3】:

我从this link 找到了另一个解决方案。 不必使用循环。我修改了他的代码以删除警告

makeImageWithColorAndSize 函数可以作为普通函数实现

extension UIImage 
    func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage 
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIRectFill(CGRectMake(0, 0, size.width, size.height))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    

使用示例:

override func viewWillAppear(animated: Bool) 
    self.tabBar.selectionIndicatorImage = UIImage().makeImageWithColorAndSize(
              UIColor.blueColor(), 
              size: CGSizeMake(tabBar.frame.width/5, tabBar.frame.height))

    super.viewWillAppear(animated)

Gwendle的原码

【讨论】:

以上是关于未选择选项卡时更改 UITabBarController 选项卡图标颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery mobile 中未选择选项卡时禁用表单输入

日期字段添加到新选项卡时未显示Datepicker

更改选项卡时视图更改大小

更改选项卡时忽略自动旋转

SwiftUI:Tabview,更改选项卡时保持状态

交换选项卡时未获取数据