我正在向我的应用程序添加一个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日发布(。谢谢,苹果!