在visionOS上使用PhotosPicker时,内容有背景色.我怎么go 掉这个?我注意到Stepper也有同样的情况.

Example:

enter image description here

Code:

import SwiftUI
import PhotosUI

struct AddImageView: View {

    @State private var avatarItem: PhotosPickerItem?
    @State private var avatarImage: Image = Image("ProfileImageEmpty")
    @State private var ref: Image = Image("ProfileImageEmpty")
    
    var body: some View {
    VStack(alignment: .center, spacing: 8) {
        PhotosPicker(selection: $avatarItem, matching: .images) {
            ZStack(alignment: .center) {
                avatarImage
                    .resizable()
                    .modifier(CoverImage())
                
                if avatarImage == ref {
                    HStack(alignment: .center, spacing: 8) {
                        Image(systemName: "camera")                              
                            .font(.system(size: 18, weight:.semibold))
                        Text("Upload Image")
                            .modifier(Subtitle())
                    }
                }
            }
        }
        .background(.clear)
        .onChange(of: avatarItem) {
            Task {
                if let loaded = try? await avatarItem?.loadTransferable(type: Image.self) {
                    avatarImage = loaded
                } else {
                    print("Failed")
                }
            }
        }
    }
    .frame(maxWidth: .infinity)
    }
}

推荐答案

你可以用.photosPicker代替PhotosPicker..onTapGesture可以触发它.

struct AddImageView: View {
    
    @State private var avatarItem: PhotosPickerItem?
    @State private var avatarImage: Image = Image("ProfileImageEmpty")
    @State private var ref: Image = Image("ProfileImageEmpty")
    @State private var isPresentingPicker: Bool = false
    var body: some View {
        VStack(alignment: .center, spacing: 8) {
            
            ZStack(alignment: .center) {
                avatarImage
                    .resizable()
                    .modifier(CoverImage())
                
                if avatarImage == ref {
                    HStack(alignment: .center, spacing: 8) {
                        Image(systemName: "camera")
                            .font(.system(size: 18, weight:.semibold))
                        Text("Upload Image")
                            .modifier(Subtitle())
                    }
                }
            }.onTapGesture {
                isPresentingPicker.toggle()
            }
            .background(.clear)
            .task(id: avatarItem) { //`task` is safer than `onChange`
                guard let avatarItem else {return}

                if let loaded = try? await avatarItem.loadTransferable(type: Image.self) {
                    avatarImage = loaded
                } else {
                    print("Failed")
                }
            }
            .photosPicker(isPresented: $isPresentingPicker, selection: $avatarItem) //Modifier instead of `View`
        }
        .frame(maxWidth: .infinity)
    }
}

Swift相关问答推荐

如何根据列表中的项目数量创建多个变量?

如何将趋势线添加到线性图中?

阻塞(受CPU限制的)任务的异步功能?

NavigationLink和ObservableObject的动画片段

如何偏移HStack中的视图,但仍然约束框架以与偏移匹配?

将matchedGeometryEffect 应用于列表视图内的视图时,列表视图中的项目会受到影响 - SwiftUI

更改 SwiftUI 中按钮矩阵的填充 colored颜色

Swift Combine:如何在保留发布者结果顺序的同时进行收集?

Swift Components.Url 返回错误的 URL

如何在 SwiftUI 中正确实现Collection 夹?

使用 Date.ParseStrategy 将字符串解析为日期

找不到目标AAA的 SPM 工件 - 仅限 Xcode 13.3

What is "SwiftPM.SPMRepositoryError error 5"?

UnkeyedEncodingContainer 和 KeyedEncodingContainerProtocol 中的 superEncoder 是什么?

如何防止 UITableViewCell 移动(Swift 5)

在运行时访问 UIView 宽度

subscribeOn 和 observeOn 的顺序重要吗?

swift 中的@property/@synthesize 类似功能

Swift 2.0 按属性对对象数组进行排序

Swift中方法的弃用和其他属性,如何?