有人发现 UIDatePicker 在 iOS 14 下损坏了吗?

Anyone find that UIDatePicker is broken under iOS 14?

在 iOS 14 下,我的应用程序中的 date/time 选择器已损坏。项目中没有任何变化。它们是在故事板中定义的,并且在我几天前更新之前工作正常。

现在他们不是纺纱厂了;它们是带有静态文本的大灰色框。

更新:Apple 通过将 date/time 选择器的样式默认为“自动”而不是“滚轮”(以前存在的唯一样式,并且每个人的现有屏幕布局都是为此设计的)来破坏现有项目。请参阅下面 Sanzio 的回答。

事实证明,Apple 添加了第二种风格非常不同的 UIDatePicker,并莫名其妙地将其设为旧项目的默认值。

您现在必须进入所有 date/time 选择器的设置并将样式从“自动”更改为“轮子”。 “自动”基于什么以及为什么它不默认为以前唯一存在的样式是未知的。

为 Oscar 的回答添加一些额外信息...

根据文档 here and here

UIDatePicker 现在具有三种不同的样式。日期选择器的样式可通过 .preferredDatePickerStyle 属性 访问,可以设置为四种不同的情况:

  1. .automatic - 表示系统根据当前平台和日期选择器模式选择具体样式的样式。
  2. .compact - 一种样式,指示日期选择器显示为标签,点击时显示 calendar-style 编辑器。
  3. .inline - 一种指示日期选择器显示为内嵌可编辑字段的样式。
  4. .wheels - 表示日期选择器显示为轮式选择器的样式。

如果您想让事情看起来像 iOS 14 之前的样子,请坚持使用 .wheels 风格。还值得注意的是,并非所有样式都可以适应所有日期和时间设置,因此您只能设置一个首选样式。

最后,此 属性 仅在 iOS 13.4 或更新版本中可用,因此您必须使用类似以下内容的版本控制:

if #available(iOS 13.4, *) {
    yourDatePicker.preferredDatePickerStyle = UIDatePickerStyle.automatic
} else {
    // Fallback on earlier versions
}
if #available(iOS 13.4, *) {
    datePicker.preferredDatePickerStyle = .wheels
}

如果有人在找Objective-C:

if (@available(iOS 13.4, *)) {
    datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
} 
in iOS appDelegate.m 

didFinishLaunchingWithOptions . () inside 

if (@available(iOS 14, *)) {
      UIDatePicker *picker = [UIDatePicker appearance];
    picker.preferredDatePickerStyle = UIDatePickerStyleWheels;
}

<DateTimePickerModal
    datePickerContainerStyleIOS={{paddingHorizontal: 40}}
    // display={Platform.OS === "ios" ? "spinner" : "default"}                              
    isVisible={isDatePickerVisible}
    mode={mode}
    maximumDate={new Date()}
    onConfirm={handleConfirm}
    onCancel={hideDatePicker}
    />

detail description