iOS 15系统UIProgressView进度动画时tintColor透明度异常如何解决?
问题根因
这是iOS 15系统对UIProgressView的默认行为变更:系统会在进度值较低时自动降低进度条填充色的透明度,仅在进度接近1时恢复为完全不透明的设置色,低版本iOS无此逻辑,因此你在iOS 12.4上运行表现正常。
解决方案
通过设置纯色的progressImage替代tintColor/progressTintColor配置,可以绕开系统自动调整透明度的逻辑,是兼容性最好的修复方案:
- 先添加生成纯色图片的扩展:
extension UIImage { static func makeSolidColor(_ color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) -> UIImage { let renderer = UIGraphicsImageRenderer(size: size) return renderer.image { context in color.setFill() context.fill(CGRect(origin: .zero, size: size)) } } }
- 替换原有的进度条颜色配置:
// 注释掉原有的tintColor/progressTintColor赋值 // progressView.tintColor = .red // progressView.trackTintColor = .gray // 改为设置纯色图片 progressView.progressImage = UIImage.makeSolidColor(.red) progressView.trackImage = UIImage.makeSolidColor(.gray)
修改后无论进度值为多少,进度条颜色都会保持你设置的纯色效果,不会出现透明度变化的异常。
内容的提问来源于stack exchange,提问作者V D Purohit
相关产品推荐
相关产品推荐

