Xamarin.Forms.Svg.SvgImageSource.FromSvgUri()加载file:// URI无效问题咨询
Xamarin.Forms.Svg 加载本地临时目录SVG失败问题解答
Xamarin.Forms.Svg.SvgImageSource.FromSvgUri 接口不支持直接加载file://协议的本地URI资源,该接口设计仅用于处理HTTP/HTTPS协议的网络SVG资源,本地文件场景需使用对应适配的接口。
正确实现方案
方案1:使用专门处理本地文件的FromSvgFile接口
无需拼接file://协议头,直接传入本地SVG文件的物理绝对路径即可,示例代码如下:
// 直接传递临时目录下的SVG文件物理路径 var svgSource = Xamarin.Forms.Svg.SvgImageSource.FromSvgFile( "/Users/jay/Library/Developer/CoreSimulator/Devices/398F23D7-B2A5-4F7C-B949-5E7E3B9AA0F1/data/Containers/Data/Application/B7EC93CF-1340-44CB-8DC5-72FDCD1349A1/tmp/tempPath/svgs/register_icon_pin.svg", 80, 80, Color.Green);
方案2:使用流加载接口FromSvgStream
如果你已经将SVG文件读取为内存流,可使用该接口加载:
string svgFilePath = Path.Combine(Path.GetTempPath(), "tempPath/svgs/register_icon_pin.svg"); using (var fileStream = File.OpenRead(svgFilePath)) { var svgSource = Xamarin.Forms.Svg.SvgImageSource.FromSvgStream( () => fileStream, 80, 80, Color.Green); }
注意事项
- iOS沙箱文件系统大小写敏感,需确认传入的文件路径大小写和实际存储的路径完全一致,避免因匹配失败无法读取文件
- 可先将临时目录下的SVG文件导出,通过浏览器打开验证文件本身没有损坏、格式符合规范
内容的提问来源于stack exchange,提问作者Jay Sidri
相关产品推荐
相关产品推荐

