ios - UIDatePicker 在渲染时颠簸日期/时间
问题描述
我正在向我的应用程序添加一个 UIDatePicker,并且我使用 UITextField.inputView 来呈现它,而不是常规键盘(因此我们不会为视图上的选择器占用额外的空间)。
我.wheels
用作 datePicker 的样式。
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(第 2 次)的模拟器上测试此代码时,选择日期存在问题:当我尝试选择任何日期时,它将第一个组件与未来的 3 个元素相撞:
- 如果
datePickerMode
是.dateTime
,它会颠簸 3 天, - 如果
datePickerMode
是.date
,它会增加 3 个月, - 如果
datePickerMode
是.time
,它会颠簸 3 小时。
此外,触发器中的任何点击都会ViewController
触发此日期碰撞行为。
我创建了一个简单的复制项目:https ://github.com/egorshulga/datepicker-debugging 。在那里,我添加了另一个 UIDatePicker,将其放在文本字段下方,以表明对于常规选择器,该问题不可重现。
我的环境:
- macOS 大苏尔 11.2.3
- UTC+3
- Xcode 12.4 (12D4e)
- 失败的模拟器:iPhone SE 2nd gen (iOS 14.4)
我尝试过的(但没有奏效):
- 将 UIDatePicker 作为子视图包装到视图中
datePicker.sizeToFit()
在将其分配为之前调用field.inputView
- 更改为主机 mac 上的其他时区
此外,我在其他模拟器(iPhone 12 Pro Max、iPhone 8)和真正的 iPhone 11 Pro Max 上检查了该问题 - 该问题不可重现。不幸的是,我没有 iPhone SE 2nd gen 作为真正的设备来检查这种行为。
iPhone SE 第二代模拟器有什么问题?
解决方案
嗯,据我所知,该问题在 iPhone SE 2nd Gen 模拟器 iOs 14.5 上不再重现(最新的 Xcode 版本 12.5 12E262 于 2021 年 4 月 26 日到货)。谢谢,苹果!
推荐阅读
- php - 如何使用 php 和 md5 将存储在数据库中的图像与用户输入的图像进行比较
- perl - 在 windows 环境中使用 Perl 比较两个文件中的 500 万条记录时如何修复内存不足错误
- performance - 批处理:减慢处理速度
- php - 将特定年龄范围变成一系列数字
- julia - Julia:在排序矩阵中搜索列
- opencv - 如何在OpenCV中优先计算射线线段相交?并得到它的交点和与原点的距离?
- ios - 如何将图像保存在内存中以及如何快速压缩所有图像?
- mysql - 如何修复flask中mysqlclient构建轮失败的错误
- cython - Cython 文件写入
- coq - 是否可以删除/覆盖现有的强制?