首页 > 解决方案 > SwiftUI - 更改 GraphicalDatePickerStyle DatePicker 的可见性会导致内存泄漏

问题描述

我有一个具有日期选择器 ( GraphicalDatePickerStyle) 的应用程序。它默认隐藏。当您点击包含它的视图时,它变得可见。

日期时间选择器

struct DateTimePicker<Content: View>: View {
    @Binding var selection: Date
    
    @State private var isDatePickerVisible: Bool = false
        
    private var displayedComponents: DatePickerComponents
    
    private var content: (_ isVisible: Bool) -> Content
    
    
    init(selection: Binding<Date>,
         displayedComponents: DatePickerComponents = [.date],
         content: @escaping (_ isVisible: Bool) -> Content) {
        self._selection = selection
        self.content = content
        self.displayedComponents = displayedComponents
    }
    

    var body: some View {
        VStack(alignment: .center) {
            self.content(isDatePickerVisible)
                .onTapGesture {
                    withAnimation {
                        self.isDatePickerVisible.toggle()
                    }
                }
            if isDatePickerVisible {
                VStack {
                    DatePicker("",
                               selection: $selection,
                               displayedComponents: self.displayedComponents)
                        .labelsHidden()
                        .datePickerStyle(GraphicalDatePickerStyle())
                }
            }
        }
    }
}

包含 DateTimePicker 的 ContentView

struct ContentView: View {

    @State var selection = Date()

    var body: some View {
        ScrollView(.vertical) {
            DateTimePicker(selection: $selection) { _ in
                HStack {
                    Text("Date ")
                    Spacer()
                    Text("\(selection)")
                }
            }
        }
    }
}

如果显示和隐藏,会有一些内存泄漏DateTimePicker。我尝试了很多但无法修复它。

在此处输入图像描述

标签: iosmemory-leaksdatepickerswiftui

解决方案


推荐阅读