如何在 SwiftUI 中使用 .svg 图片

Posted

技术标签:

【中文标题】如何在 SwiftUI 中使用 .svg 图片【英文标题】:how to use .svg images in SwiftUI 【发布时间】:2019-10-01 23:09:05 【问题描述】:

我只能将 .png 文件上传到 assets 文件夹吗?我收到 .svg 文件的错误。 我想将它用于 Image() 组件

【问题讨论】:

我还建议您查看 PaintCode。它将允许导入 SVG 文件并将它们导出为代码,可用于生成可缩放的图像或根据您的需要绘制代码 【参考方案1】:

您可以使用 Macaw 显示 SVG:https://github.com/exyte/Macaw

1)通过SPM将Package添加到你的项目中(标签0.9.5其实是不行的,你需要使用master分支)

2) 将您的 .svg 文件移动到项目中或在 Assets.xcassets 中创建一个新数据集,然后将 svg 文件添加到该数据集中。

3) 使用此代码:

struct MyView: View 

    var svgName: String

    var body: some View 
        SVGImage(svgName: self.svgName)
            .frame(width: 50, height: 550)
    

struct SVGImage: UIViewRepresentable 

    var svgName: String

    func makeUIView(context: Context) -> SVGView 
        let svgView = SVGView()
        svgView.backgroundColor = UIColor(white: 1.0, alpha: 0.0)   // otherwise the background is black
        svgView.fileName = self.svgName
        svgView.contentMode = .scaleToFill
        return svgView
    

    func updateUIView(_ uiView: SVGView, context: Context) 

    


【讨论】:

资产中的数据集对我不起作用 - 将文件复制到 Resources/。一个小问题——如果文件名是icon.svg,那么你想说SVGImage(svgName: "icon") 执行此操作时(Xcode 12.5,ios 部署目标 14.5),MyView 将忽略 .frame(width: 50, height: 550) 修饰符。换句话说,地图显示大于框架,并且修改器不会将显示限制在此框内。 @cgold 它仍然忽略给定的帧。你找到解决办法了吗?【参考方案2】:

我创建了一个简单的工具,它将 SVG 代码转换为 SwiftUI 的 Shape 对象。目前它非常有限(特别是它只支持直线和三次曲线、单路径 SVG 和用一种颜色填充的形状),但您仍然可以在简单的情况下使用它。

这里是 link to the tool 和 repository,如果您想贡献并使其支持所有 SVG 功能。

【讨论】:

@Will 如果您使用提供的 SVG 代码在存储库中创建问题,我将能够解决。这只是支持您正在使用的 SVG 功能的问题,但我还没有实现,但如果我有 SVG 代码示例,很容易修复。 它可以工作,但它会在框架中留下一个空间。它不拥抱框架 我猜那是你使用的 SVG,但如果可以的话,请在 GitHub 上用你使用的 SVG 创建一个问题!然后我就可以修复它了:) 那个在线工具非常有用。谢谢!【参考方案3】:

您可以将 pdf 用于资产目录中的矢量(选择单一比例并在右侧的检查器中保留矢量数据)。您不能直接在资产目录中使用 SVG,但在 Xcode 11 中,您实际上可以将 SVG 用于符号。 Apple 提供了有关如何制作自己的 SVG 符号的详细指南here。

【讨论】:

我收到一个错误。显然它不满足要求,因为页面告诉我您已链接。我下载了这个 svg 包。我不知道 Adob​​e Illustrator 什么的。。【参考方案4】:

您也可以在 XCAssets 中导入 svg 图像。 转到 XCAssets,单击 + 按钮。 Refer this image

点击导入并选择 svg 图片。

现在使用下面的代码加载和显示该图像:

Image(uiImage: UIImage(named: "imageName")!)

【讨论】:

Xcode 是否将 svg 转换为 png/jpeg?

以上是关于如何在 SwiftUI 中使用 .svg 图片的主要内容,如果未能解决你的问题,请参考以下文章

svg用啥打开

php下svg格式如何转换为png

如何使存储在 svg 图片的填充字段中的颜色成为变量?

二十如何导入svg图片

swiftui 在您的项目中使用非 SF Symbols SVG

如何在 HTML 中使用外部 SVG?