Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SwiftUI DatePicker does not always update State<Date> variable

Tags:

ios

swift

swiftui

For some reason DatePicker does not always update the date var associated with it. Am I doing something wrong? I can basically scroll around randomly and sometimes I can get to a point where my Text showing the current picked date (var $entryDate) differs from what the DatePicker shows that I have selected - my code:

struct addView: View {

  @State private var entryDate: Date = Date()

  var body: some View {
      VStack {
        HStack {
          Spacer()
          DatePicker("_", selection: $entryDate, in: ...Date(), displayedComponents: .date)
            .labelsHidden()
            .datePickerStyle(WheelDatePickerStyle())
            .frame(minWidth: 0, maxWidth: .infinity, alignment: .center)
            .environment(\.locale, Locale.current)
          Spacer()
        }
        Text("\(entryDate)")
      }
  }
}
like image 421
2092Juli Avatar asked Jan 19 '26 19:01

2092Juli


1 Answers

This is a known SwiftUI Bug. I solved it with a little workaround:

@State private var refresh = false

      DatePicker("_"  + (refresh ? "" : " "), selection: $entryDate, in: ...Date(), displayedComponents: .date)
        .labelsHidden()
        .datePickerStyle(WheelDatePickerStyle())
        .frame(minWidth: 0, maxWidth: .infinity, alignment: .center)
        .environment(\.locale, Locale.current)

And at the end of your View:

.onReceive(self.$refresh) { _ in
   self.refresh.toggle()
}

Should even work with your labelsHidden().

like image 99
Kuhlemann Avatar answered Jan 21 '26 11:01

Kuhlemann