0

我正在创建一个库图标类,它接收图标名称、标志“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 指定的大小相等

4

1 回答 1

0

这是可能的解决方案。使用 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)
        }
    }
}
于 2020-04-23T14:44:00.173 回答