有人发现 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
属性 访问,可以设置为四种不同的情况:
.automatic
- 表示系统根据当前平台和日期选择器模式选择具体样式的样式。
.compact
- 一种样式,指示日期选择器显示为标签,点击时显示 calendar-style 编辑器。
.inline
- 一种指示日期选择器显示为内嵌可编辑字段的样式。
.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}
/>
在 iOS 14 下,我的应用程序中的 date/time 选择器已损坏。项目中没有任何变化。它们是在故事板中定义的,并且在我几天前更新之前工作正常。
现在他们不是纺纱厂了;它们是带有静态文本的大灰色框。
更新:Apple 通过将 date/time 选择器的样式默认为“自动”而不是“滚轮”(以前存在的唯一样式,并且每个人的现有屏幕布局都是为此设计的)来破坏现有项目。请参阅下面 Sanzio 的回答。
事实证明,Apple 添加了第二种风格非常不同的 UIDatePicker,并莫名其妙地将其设为旧项目的默认值。
您现在必须进入所有 date/time 选择器的设置并将样式从“自动”更改为“轮子”。 “自动”基于什么以及为什么它不默认为以前唯一存在的样式是未知的。
为 Oscar 的回答添加一些额外信息...
根据文档 here and here,UIDatePicker
现在具有三种不同的样式。日期选择器的样式可通过 .preferredDatePickerStyle
属性 访问,可以设置为四种不同的情况:
.automatic
- 表示系统根据当前平台和日期选择器模式选择具体样式的样式。.compact
- 一种样式,指示日期选择器显示为标签,点击时显示 calendar-style 编辑器。.inline
- 一种指示日期选择器显示为内嵌可编辑字段的样式。.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}
/>