SwiftUI:无法向下拖动以关闭UIImagePickerController

6

我使用以下代码来显示默认的UIImagePickerController,但是似乎在iOS 13中使用SwiftUI包装的UIImagePickerController无法使用下拉手势关闭,用户仍可以点击默认的Cancel标签栏项以关闭选择器。代码如下:

struct ContentView: View {
    @State private var showModal = false
    var body: some View {
        Text("Tap To show modal")
        .padding()
            .onTapGesture {
                self.showModal.toggle()
        }
        .sheet(isPresented: $showModal) {
            SomeUIKitView()
        }
    }
}

final class SomeUIKitViewControllerWrapper: UIViewControllerRepresentable {
    typealias UIViewControllerType = UIImagePickerController

    func makeUIViewController(context: Context) -> UIImagePickerController {
        let imagePicker = UIImagePickerController()
        imagePicker.sourceType = UIImagePickerController.SourceType.photoLibrary
        return imagePicker
    }
    func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {}
}

struct SomeUIKitView: View {
    var body: some View {
        SomeUIKitViewControllerWrapper()
    }
}

enter image description here


也许那个库支持这个功能?还没有测试过:https://github.com/egeniq/BetterSheet - davidev
我尝试了,但是仍然出现同样的问题。 - JAHelia
1个回答

2

您可以在SwiftUI中构建自己的下拉菜单。在您的情况下,您可以尝试为SomeUIKitView()视图实现它。

import SwiftUI

struct SwiftUIDragDown: View {
  @State private var dragDownTreshhold: CGFloat = 50
  @State private var draggedDistance: CGFloat = 0
  @State private var dragDownOffsetY: CGFloat = 0


  var body: some View {
    Text("Drag me")
      .offset(x: 0, y: dragDownOffsetY + draggedDistance)
      .animation(.easeInOut(duration: 0.3))
      .gesture(
        DragGesture(minimumDistance: 10)
          .onChanged { value in
            print("dragged by" , value.translation.height)
            self.draggedDistance = value.translation.height
        }
        .onEnded { _ in
          if self.draggedDistance > self.dragDownTreshhold {
            self.dragDownOffsetY = 600
          } else {
            self.draggedDistance = 0
            self.dragDownOffsetY = 0
          }
        }
    )
  }
}

struct SwiftUIDragDown_Previews: PreviewProvider {
  static var previews: some View {
    SwiftUIDragDown()
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接