【问题标题】:Can't drag down/dismiss UIColorPickerViewController无法向下拖动/关闭 UIColorPickerViewController
【发布时间】:2022-08-10 01:03:41
【问题描述】:

我使用 sheet() 方法将 UIColorPickerViewController 显示为工作表,一切正常,但我不能再向下拖动/关闭视图。

import Foundation
import SwiftUI

struct ColorPickerView: UIViewControllerRepresentable {
    private var selectedColor: UIColor!
    
    init(selectedColor: UIColor) {
        self.selectedColor = selectedColor
    }
    
    func makeUIViewController(context: Context) -> UIColorPickerViewController {
        let colorPicker = UIColorPickerViewController()
        colorPicker.selectedColor = self.selectedColor
        
        return colorPicker
    }
    
    func updateUIViewController(_ uiViewController: UIColorPickerViewController, context: Context) {
        // Silent
    }
}
.sheet(isPresented: self.$viewManager.showSheet, onDismiss: {
    ColorPickerView()
}

知道如何使拖动/向下关闭手势起作用吗?

谢谢!

    标签: swiftui uiviewcontrollerrepresentable uicolorpickerviewcontroller


    【解决方案1】:

    在尝试构建类似于上面的颜色选择器时遇到了同样的问题。起作用的是使用“关闭”按钮将颜色选择器“包装”在视图中。并且还发现视图顶部的栏将允许选择器现在被向下拖走。下面是我的包装。 (可以向栏添加更多功能,例如标题。)

    struct ColorWrapper: View {
        var inputColor: UIColor
        @Binding var isShowingColorPicker: Bool
        @Binding var selectedColor: UIColor?
    
        var body: some View {
            VStack {
                HStack {
                    Spacer()
                    Button("Dismiss", action: {
                        isShowingColorPicker = false
                    }).padding()
                }
                ColorPickerView(inputColor: inputColor, selectedColor: $selectedColor)
            }
        }
    }
    

    为了完整起见,这是我的颜色选择器版本:

    import SwiftUI
    
    struct ColorPickerView: UIViewControllerRepresentable {
        typealias UIViewControllerType = UIColorPickerViewController
    
        var inputColor: UIColor
    
        @Binding var selectedColor: UIColor?
    
        @Environment(\.presentationMode) var isPresented
    
        func makeUIViewController(context: Context) -> UIColorPickerViewController {
            let picker = UIColorPickerViewController()
            picker.delegate = context.coordinator
            picker.supportsAlpha = false
            picker.selectedColor = inputColor
            return picker
        }
    
        func updateUIViewController(_ uiViewController: UIColorPickerViewController, context: Context) {
            uiViewController.supportsAlpha = false
        }
    
        func makeCoordinator() -> Coordinator {
            return Coordinator(parent: self)
        }
    
        class Coordinator: NSObject, UINavigationControllerDelegate, UIColorPickerViewControllerDelegate {
            var parent: ColorPickerView
    
            init(parent: ColorPickerView) {
                self.parent = parent
            }
    
            func colorPickerViewControllerDidFinish(_ viewController: UIColorPickerViewController) {
                parent.isPresented.wrappedValue.dismiss()
            }
    
            func colorPickerViewController(_ viewController: UIColorPickerViewController, didSelect color: UIColor, continuously: Bool) {
                parent.selectedColor = color
                parent.isPresented.wrappedValue.dismiss()
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 2020-07-06
      • 2015-05-31
      • 1970-01-01
      • 2019-11-12
      相关资源
      最近更新 更多