ios - 在 Swift 中将 UIDate Picker 编程为固定在屏幕底部
问题描述
我正在尝试将 UIDatePicker 添加到已经存在的一组文本字段中。即使尝试了我在 StackOverflow 上看到的所有解决方案,我也无法将 UI 日期选择器设置到屏幕底部。我正在使用 MVVM 模型,并且我创建了一个单独的文件来创建 Picker 视图。
class UAFieldDatePickerView: UIStackView {....}
extension UAFieldDatePickerView {
@objc private func didTapDateView() {
guard viewModel.state.value != .disabled else {
return
}
let datePicker = UIDatePicker()
datePicker.frame = CGRect(x: 0, y: UIScreen.main.bounds.height - 200, width: self.frame.size.width, height: 200)
datePicker.backgroundColor = UIColor.UANeutralGray05
datePicker.datePickerMode = .date
datePicker.date = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
datePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
self.addSubview(datePicker)
}
@objc func datePickerValueChanged(_ datePicker: UIDatePicker) {
datePicker.maximumDate = Date()
}
}
我面临的问题是无法将 DatePicker 固定到屏幕底部。我将如何确保框架始终固定在底部。
解决方案
UIDatePicker
继承自UIControl
,这意味着它也是 的子类UIView
,并且它遵循与任何其他视图相同的规则。如果您想在屏幕底部放置一个日期选择器,那么您需要将它放在那里。
datePicker.frame = CGRect(x: 0, y: UIScreen.main.bounds.height - 200, width: self.frame.size.width, height: 200)
在这里,您将日期选择器的垂直位置设置为屏幕高度减去选择器的高度。但是您没有将选择器添加到屏幕,而是将其添加到self
. 如果您希望选择器位于要添加它的视图的底部,那么您应该根据该视图计算高度,而不是基于其他可能具有或可能不同大小的东西。由于您将选择器添加到self
,因此用于self.bounds.size.height
计算位置:
datePicker.frame = CGRect(x: 0, y: self.bounds.size.height - 200, width: self.bounds.size.width, height: 200)
如果您希望选择器位于屏幕底部,则要么采取措施确保包含它的视图位于屏幕底部,要么以不同的方式显示选择器。CZ54 在评论中建议使用选择器作为输入视图是一个很好的建议;执行类似操作的更通用方法是从屏幕底部模态显示日期选择器。
推荐阅读
- excel - 使用 Excel 的 vba 在公式内向左移动一列
- java - JavaFX (java.lang.NullPointerException)
- javascript - 类、碰撞检测和 for 循环问题
- rxjs - Rx 中的 Array Join ish 运算符
- c# - 是否可以将 listBox 选定的项目从一个 wpf 页面传递到另一个页面
- php - SMARTY:如何从数据库 foreach 循环中填充新数组
- javascript - 为什么使用 jsPDF justify for text 保持其他文本的字间距?
- javascript - ngFor 值(数字)的 Angular 2 摘要
- ios - 遍历 Swift 4 中的可选对象
- axapta - 如何获取 dbo.CUSTTRANS 中一行的位置?