SwiftUI - 对 不完全是解决方案的解决方案

问题描述

我有一个 .onTapGesture 修饰符,当点击它时会显示一个 ImagePicker,然后立即关闭它。


@State private var updateInfo = false

var body: some View {
  HStack {
            placeholder.image
                .resizable()
                .aspectRatio(contentMode: .fill)
                .font(.system(size: 16,weight: .medium))
                .frame(width: 100,height: 100)
                .clipShape(Circle())
                .shadow(color: Color.black.opacity(0.1),radius: 1,x: 0,y: 1)
                .onTapGesture {
                    updateInfo.showImagePicker = true
                }
                .sheet(isPresented: $updateInfo.showImagePicker) {
                    ImagePicker(showImagePicker: $updateInfo.showImagePicker,pickedImage: $updateInfo.image,imageData: $updateInfo.imageData)
                }
        }
    }

这是我的 ImagePicker

import SwiftUI

struct ImagePicker: UIViewControllerRepresentable {
    @Binding var showImagePicker: Bool
    @Binding var pickedImage: Image
    @Binding var imageData: Data
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
        
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = context.coordinator
        return imagePicker
        
    }
    
    func updateUIViewController(_ uiViewController: UIImagePickerController,context: Context) {
        return
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    class Coordinator: NSObject,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
        
        var parentImagePicker: ImagePicker
        
        init(_ imagePicker: ImagePicker) {
            self.parentImagePicker = imagePicker
        }
        
        func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            
            let uiImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
            
            parentImagePicker.pickedImage = Image(uiImage: uiImage)
           
            if let mediaImage = uiImage.jpegData(compressionQuality: 0.5) {
                parentImagePicker.imageData = mediaImage
            }
            parentImagePicker.showImagePicker = false
        }
        
        func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
            parentImagePicker.showImagePicker = false
        }
    }
}

我一直在控制台中收到此错误:对 <_uiimagepickerplaceholderviewcontroller:>

的开始/结束外观转换的调用不平衡

不确定我在哪里转换不正确。我有一个包含三个选项卡的选项卡栏视图。最后一个选项卡有一个导航栏项,用于推送详细信息 updateInfo 视图。

我点击占位符图像,系统会在立即关闭之前显示图像选择器控制器(有点)。我再次点击它,图像选择器控制器就会出现。

关于为什么它第一次被解雇的想法?

解决方法

不完全是解决方案的解决方案

我试图在视图上调用 ImagePickerController 并不断收到不平衡的视图错误。所以我创建了一个完全不同的视图来选择一个新图像。错误尚未解决,但我的问题已解决。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...