iOS中SVG字符串转UIImage失败求助:UIImage与SVGKit均返回nil
解决SVG转UIImage返回nil的问题
核心问题分析
你的SVG字符串存在关键语法错误:SVG标准属性为viewBox(大写字母B),但你写的是viewbox(小写b)。SVG解析器对属性大小写敏感,这会导致无法正确识别视图范围,最终渲染失败返回nil。
修复步骤
修正SVG属性拼写
将SVG中的viewbox="0 0 24 24"改为viewBox="0 0 24 24"。清理后正确的SVG字符串
let svg = """ <svg aria-hidden="true" class="pre-logo-svg" focusable="false" viewBox="0 0 24 24" role="img" width="60px" height="60px" fill="none"> <path fill="currentColor" fill-rule="evenodd" d="M21 8.719L7.836 14.303C6.74 14.768 5.818 15 5.075 15c-.836 0-1.445-.295-1.819-.884-.485-.76-.273-1.982.559-3.272.494-.754 1.122-1.446 1.734-2.108-.144.234-1.415 2.349-.025 3.345.275.2.666.298 1.147.298.386 0 .829-.063 1.316-.19L21 8.719z" clip-rule="evenodd"></path> </svg> """
- 重新使用SVGKit转换
确保已正确导入SVGKit,执行以下代码:
import SVGKit // 转换SVG字符串为Data guard let svgData = svg.data(using: .utf8) else { return } // 生成SVG图片 let svgImage = SVGKImage(data: svgData) // 赋值给UIImageView,设置tintColor对应SVG中的currentColor imageView.image = svgImage?.uiImage imageView.tintColor = .black // 根据需求调整颜色
额外注意事项
- 确认SVGKit已正确集成到项目中(如通过CocoaPods或Swift Package Manager)
currentColor会继承UIImageView的tintColor,若不设置该属性,路径可能显示为透明,易被误认为未加载成功
内容的提问来源于stack exchange,提问作者martin wotterman
相关产品推荐
相关产品推荐

