You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS14.0.1下动态修改UITabBarItem图片遇问题求解决方案

解决UITabBarItem动态修改图片的尺寸与颜色问题

针对你在iOS14.0.1、Swift5.3、Xcode12.0.1环境下遇到的两个问题,我给你整理了具体的解决方案:

问题一:图片尺寸过大

UITabBarItem有固定的图标尺寸规范(iOS标准是24x24pt左右),直接赋值原图会因为没有适配这个尺寸导致显示过大。你可以通过两种方式解决:

方式1:缩放图片到标准尺寸

写一个UIImage的扩展方法,把原图缩放到TabBar图标要求的大小:

extension UIImage {
    func scaledToTabBarSize() -> UIImage? {
        // TabBar图标标准尺寸:24x24pt,可根据需求微调
        let targetSize = CGSize(width: 24, height: 24)
        UIGraphicsBeginImageContextWithOptions(targetSize, false, UIScreen.main.scale)
        defer { UIGraphicsEndImageContext() }
        draw(in: CGRect(origin: .zero, size: targetSize))
        return UIGraphicsGetImageFromCurrentImageContext()
    }
}

方式2:调整图片内边距(临时应急用)

如果不想缩放图片,可以通过设置imageInsets压缩显示空间,但这种方式可能会让图片变形,优先推荐方式1:

self.tabBarCtrl?.viewControllers?[2].tabBarItem.imageInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)

问题二:图片颜色错误

这是因为UITabBarItem默认会把图片渲染成系统的tintColor(比如蓝色),覆盖了图片本身的颜色。只要把图片的渲染模式设置为.alwaysOriginal,就能保留原图的颜色:

整合尺寸与颜色的完整代码

把两个问题的解决逻辑结合起来,最终代码如下:

// 获取原图并处理
if let originalImage = #imageLiteral(resourceName: "Sign_ready"),
   let tabBarImage = originalImage.scaledToTabBarSize()?.withRenderingMode(.alwaysOriginal) {
    // 同时设置普通状态和选中状态的图片
    let tabBarItem = self.tabBarCtrl?.viewControllers?[2].tabBarItem
    tabBarItem?.image = tabBarImage
    tabBarItem?.selectedImage = tabBarImage
}

额外说明:如果用了UITabBarAppearance

如果你在iOS14中配置了UITabBarAppearance,要确保外观设置不会影响图片的颜色渲染:

let tabBarAppearance = UITabBarAppearance()
// 如果需要自定义选中/未选中的图标颜色,确保图片用了.alwaysOriginal才会生效
tabBarAppearance.stackedLayoutAppearance.normal.iconColor = .gray
tabBarAppearance.stackedLayoutAppearance.selected.iconColor = .black
self.tabBarCtrl?.tabBar.standardAppearance = tabBarAppearance

这样修改后,你的TabBarItem图片就能正常显示正确的尺寸和颜色啦!

内容的提问来源于stack exchange,提问作者iKK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:47:30