UIDatePicker在渲染时会更改日期/时间



我正在向我的应用程序添加一个UIDatePicker,并且我正在使用UITextField.inputView来渲染它,而不是使用常规键盘(这样我们就不会在视图上为选择器占用额外的空间(。

我使用.wheels作为日期选取器的样式。

class ViewController: UIViewController {
@IBOutlet weak var field: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
field.delegate = self
}
}
extension ViewController : UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == field {
let datePicker = UIDatePicker()
datePicker.datePickerMode = .dateTime // or .time, or .date
datePicker.preferredDatePickerStyle = .wheels
field.inputView = datePicker
}
}
}

当在IPhone SE模拟器(第二版(上测试此代码时,选择日期有问题:当我尝试选择任何日期时,它会将第一个组件撞到未来的3个元素:

  • 如果datePickerMode.dateTime
  • 如果datePickerMode.date
  • 如果datePickerMode.time,它会颠簸3小时

此外,ViewController中的任何抽头都会触发这种日期碰撞行为。

我创建了一个简单的repo项目:https://github.com/egorshulga/datepicker-debugging.在那里,我添加了另一个UIDatePicker,将其放在文本字段的正下方,以表明对于常规Picker,问题是不可复制的

以下是问题演示的截屏:演示1演示2

我的环境:

  • macOS Big Sur 11.2.3
  • UTC+3
  • Xcode 12.4(12D4e(
  • 失败模拟器:IPhone SE第二代(iOS 14.4(

我尝试了什么(但没有成功(:

  • 将UIDatePicker包装到作为子视图的视图中
  • 调用datePicker.sizeToFit(),然后将其分配为field.inputView
  • 在主机mac上更改为其他时区

此外,我在其他模拟器(IPhone 12 Pro Max、IPhone 8(和真正的IPhone 11 Pro Max上检查了该问题-该问题无法再现。不幸的是,我没有IPhone SE第二代作为真正的设备来检查这种行为。

IPhone SE第二代模拟器可能出了什么问题?

Hm,据我所见,该问题在IPhone SE第二代模拟器iOs 14.5上不再可再现(最新的Xcode版本12.5 12E262于2021年4月26日发布(。谢谢,苹果!

最新更新