Ios 迅捷:can';t向下拖动以关闭UIImagePickerController
我正在使用下面的代码显示默认的Ios 迅捷:can';t向下拖动以关闭UIImagePickerController,ios,swift,swiftui,Ios,Swift,Swiftui,我正在使用下面的代码显示默认的UIImagePickerController,但是IOS13的下拉关闭手势似乎不适用于包装在SwiftUI视图中的UIImagePickerController,用户仍然可以点击默认的Cancel选项卡栏项来解除选择器,代码: struct ContentView: View { @State private var showModal = false var body: some View { Text("Tap To show
UIImagePickerController
,但是IOS13
的下拉关闭手势似乎不适用于包装在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()
}
}
您可以在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()
}
}