iOS Swift中如何使用SVG资源内的Medium-Light特定符号?
解决Xcode中调用谷歌SVG图标特定权重样式的问题
你遇到的崩溃是因为Xcode无法识别原SVG文件里的Medium-Light样式分支,直接用search-medium-light作为名称调用时找不到对应资源,强制解包!触发了崩溃。下面是两种可行的解决方法:
方法一:拆分SVG为单独的权重文件
谷歌的Material Icons这类SVG通常会把不同权重的图标路径打包在同一个文件里,你需要把Medium-Light对应的路径单独提取出来:
- 用矢量编辑工具(比如Inkscape、Figma)打开
search.svg - 在文件中找到标注为
Medium-Light或对应权重(比如wght=300到wght=500区间的路径组)的元素,删除其他权重的路径内容 - 将修改后的文件另存为
search-medium-light.svg,拖入Xcode项目 - 之后就可以通过
UIImage(named: "search-medium-light")正常调用该样式的图标
方法二:用Asset Catalog配置资源变体(Xcode 13+)
如果不想拆分文件,可借助Xcode的资源变体功能实现:
- 将
search.svg拖入项目的Asset Catalog中,选中该资源 - 在右侧属性面板把Scales设置为
Single Scale(SVG是矢量,无需多分辨率版本) - 点击资源列表下方的
+ Variant按钮,添加一个新变体 - 给新变体设置标识符(比如
Medium-Light),然后将该变体的资源替换为提取好的Medium-Light路径对应的SVG文件 - 调用时通过指定配置获取变体资源:
if let config = UIImage.Configuration(identifier: "Medium-Light"), let searchImage = UIImage(named: "search", with: config) { button.setImage(searchImage, for: .normal) }
额外提示
建议避免使用强制解包!,改用可选绑定判断资源是否存在,防止因资源缺失导致崩溃。
内容的提问来源于stack exchange,提问作者Youmate
相关产品推荐
相关产品推荐

