有人发现 UIDatePicker 在 iOS 14 下被破坏了吗?
Posted
技术标签:
【中文标题】有人发现 UIDatePicker 在 iOS 14 下被破坏了吗?【英文标题】:Anyone find that UIDatePicker is broken under iOS 14? 【发布时间】:2021-01-13 21:36:26 【问题描述】:在 ios 14 下,我的应用中的日期/时间选择器已损坏。项目没有任何变化。它们是在故事板中定义的,并且在我几天前更新之前运行良好。
现在他们不是纺纱厂了;它们是带有静态文本的大灰色框。
更新:Apple 通过将日期/时间选择器的样式默认为“自动”而不是“***”(以前存在的唯一样式,并且每个人的现有屏幕布局都是为此设计的)来破坏现有项目。请参阅下面 Sanzio 的回答。
【问题讨论】:
【参考方案1】:为奥斯卡的回答添加一些额外的信息......
UIDatePicker
现在有三种不同的样式,根据文档here 和here。日期选择器的样式可以通过 .preferredDatePickerStyle
属性访问,该属性可以设置为四种不同的情况:
.automatic
- 表示系统根据当前平台和日期选择器模式选择具体样式的样式。
.compact
- 指示日期选择器显示为标签的样式,点击该标签时会显示日历样式的编辑器。
.inline
- 一种指示日期选择器显示为内嵌、可编辑字段的样式。
.wheels
- 指示日期选择器显示为***选择器的样式。
如果您想让事情看起来像 iOS 14 之前的样子,请坚持使用 .wheels
样式。还值得注意的是,并非所有样式都可以适应所有日期和时间设置,因此您只能设置首选样式。
最后,此属性仅适用于 iOS 13.4 或更高版本,因此您必须通过以下方式完成版本控制:
if #available(iOS 13.4, *)
yourDatePicker.preferredDatePickerStyle = UIDatePickerStyle.automatic
else
// Fallback on earlier versions
【讨论】:
谢谢。不幸的是,Interface Builder (Xcode 12.0.1) 中没有“内联”和“紧凑”模式。 如果我们想使用简洁风格,如何解决这个问题。我在 UITabBar 上展示它,它真的很糟糕 我们可以在一个地方进行更改,这样我们就不必显式转到使用日期选择器的每个视图并将其首选样式设置为***吗?【参考方案2】:if #available(iOS 13.4, *)
datePicker.preferredDatePickerStyle = .wheels
【讨论】:
【参考方案3】:如果有人在寻找 Objective-C:
if (@available(iOS 13.4, *))
datePicker.preferredDatePickerStyle = UIDatePickerStyleWheels;
【讨论】:
【参考方案4】:事实证明,Apple 添加了第二个非常不同的 UIDatePicker 样式,并且莫名其妙地使其成为旧项目的默认设置。
您现在必须进入所有日期/时间选择器的设置,并将样式从“自动”更改为“***”。 “自动”基于什么以及为什么它不默认为唯一先前存在的样式是未知的。
【讨论】:
【参考方案5】: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
【讨论】:
以上是关于有人发现 UIDatePicker 在 iOS 14 下被破坏了吗?的主要内容,如果未能解决你的问题,请参考以下文章
UIDatePicker 错误? UIControlEventValueChanged 达到最小内部后