【问题标题】:How to resize image in swift picker menu style如何以快速选择器菜单样式调整图像大小
【发布时间】:2022-11-18 02:25:19
【问题描述】:

我想在我的选择器中的一些文本旁边使用图像,但是图像被放大了,我无法使用 .resizable .frame 和 ... 来调整它的大小。 我该如何解决这个问题?我同时使用 svg 和 png 格式,但都无法正常工作。

我使用资产中的图像

struct ContentView: View {
    @State var array = ["one", "two", "three", "four"]
    @State var selection: String = "one"
    var body: some View {
        HStack {
            Picker("Select",selection: $selection) {
                ForEach(array, id: \.self) { item in
                    HStack {
                        Text(item)
                            Image("BTC")
                                .resizable()
                                .clipped()
                    }
                   
                }
            }
            .pickerStyle(.menu)
            .padding(.trailing)
            
        }
        
    }
}

【问题讨论】:

  • 除了图像上的 .resizable 和 .frame 之外,您是否尝试过向 HStack 添加框架约束?另外,请确保将适当的 .aspectRatio 添加到图像中。
  • 是的,我尝试向 Hstack 添加框架,但它也不起作用。但我还没有尝试将 aspectRatio 添加到图像中。
  • 纵横比也帮不了我。
  • 添加 .resizable 然后 .aspectRatio(contentMode: .fit) 然后是你的 .frame,按照这个顺序看看它做了什么
  • 我身上没有我的 Mac,所以我无法测试,但今晚我会看看它。

标签: swift image svg swiftui picker


【解决方案1】:

为此,您可以使用Menu

struct ContentView: View {
    @State var array = ["one", "two", "three", "four"]
    @State var selection: String = "one"
    var body: some View {
        Menu(content: {
            Picker("Select",selection: $selection) {
                            ForEach(array, id: .self) { item in
                                HStack {
                                    Text(item)
                                    Image("BTC")
                                }
                               
                            }
                        }
        }, label: {
            Text(selection)
        })
    }
}

【讨论】:

  • 如果你在标签中添加图像,你会得到相同的
  • 我做到了,并在标签中添加了一个 HStack。它有效,当我添加可调整大小、aspectRatio 和 Frame 修改器以正确缩放图像时。
  • @Asperi 我们可以按照这个答案调整图像大小
【解决方案2】:

这是默认的菜单行为。使用任一 SF 图像,例如

ForEach(array, id: .self) { item in
    Label(item, systemImage: "bitcoinsign.circle")
}

或原始尺寸较小的光栅图像,例如

ForEach(array, id: .self) { item in
    Label(item, image: "bitcoin")  // in Assets 24x24
}

【讨论】:

  • 我使用的是图像集,但我不能为这个项目使用 SFsymbols,所以我必须调整原始图像的大小?你有推荐的平台吗?
【解决方案3】:

如果您对选择器菜单使用旧样式(即选择新页面而不是弹出菜单),则不会发生此行为。 我认为这是新 ios 16 行为的错误。

尝试将此应用于您的选择器:

.pickerStyle(.navigationLink)

【讨论】:

    猜你喜欢
    • 2011-07-19
    • 2016-08-18
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2012-09-16
    • 2018-11-07
    相关资源
    最近更新 更多