如何在公共图标类中一起管理自定义导入图标和 sf 符号的大小调整?

Posted

技术标签:

【中文标题】如何在公共图标类中一起管理自定义导入图标和 sf 符号的大小调整?【英文标题】:How to manage the resizing of a custom imported icon and sf symbol together in a common icon class? 【发布时间】:2020-04-23 11:54:45 【问题描述】:

我正在创建一个库图标类,它接收图标名称、标志“isSF”(此标志将说明图标是否为 SF 符号)和图标的大小。我需要根据收到的大小值调整两个图标的大小。我在这里面临的问题是,对于 SF Symbols,我们可以使用 .font(.system(size : value)) 修饰符调整它的大小,但如何调整图像(自定义图标)的大小。

请帮助我。提前致谢

struct XIcon: View 
    var iconName: String
    var isSF: Bool? = true
    var size: CGFloat
    var body: some View 
        if isSF! 
            return AnyView( Image(systemName: "\(iconName)")
                .font(.system(size: size)))
         else 
            return AnyView( Image(uiImage: UIImage(named: "\(iconName)")!).resizable())
        
    


再一次,我知道当我们指定大小时,会执行矢量对齐,但对于 frame(),情况并非如此。对于图像缩放,有 scaleEffect() 但我不知道如何缩放图像,使其与为 SF Symbol 指定的大小等效

【问题讨论】:

【参考方案1】:

这是可能的解决方案。使用 Xcode 11.4 / ios 13.4 测试

注意:边框是为了更好地显示尺寸

struct XIcon: View 
    var iconName: String
    var isSF: Bool? = true
    var size: CGFloat

    var body: some View 
        var image: Image
        if isSF! 
            image = Image(systemName: "\(iconName)")
         else 
            image = Image(uiImage: UIImage(named: "\(iconName)")!)
        
        return image.resizable()
            .frame(width: size, height: size).aspectRatio(contentMode: .fill)
    


struct TestXIcon: View 
    var body: some View 
        VStack 
            XIcon(iconName: "tv", size: 100)
                .border(Color.red)
            XIcon(iconName: "icon", isSF: false, size: 100)
                .border(Color.red)
        
    

【讨论】:

增加尺寸的方式不是矢量放大..所以形状可能会变形。您可以尝试使用 battery.25 图标。使用 .font(.system(size: value)) 调整大小将为我们提供适当的放大图标(使用矢量放大完成),但您给出的解决方案可能会扭曲形状。在battery.25中使用这两种方法检查放大,你可以找到我的意思的确切变化。谢谢@Asperi @prebeesh。 .font(.system(size: value)),即。字体大小,与 Image 调整大小无关,根本与 调整大小 无关。不用争论,这是你的方式,以防万一。 哦.. 那么有没有什么方法可以在不变形的情况下调整图标的大小?就像字体大小一样?因为当我们构图时,像电池这样的图标会变形。你有什么办法可以解决吗? @Asperi

以上是关于如何在公共图标类中一起管理自定义导入图标和 sf 符号的大小调整?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 中将自定义图标添加到解决方案资源管理器

Swift 和 Xcode - 如何创建自定义标签栏图标

扩展layui中的自带字体图标

Visual Studio Shell 2015 不在解决方案资源管理器中使用自定义图标

如何在自定义模板中使用 Django 的管理员布尔图标?

日常操作之如何将桌面右下角图标收到一起