在 Swift 中编写一个固定在屏幕底部的 UIDate Picker
Programming a UIDate Picker to be fixed at the bottom of the screen in Swift
我正在尝试将 UIDatePicker 添加到一组已经存在的文本字段中。即使在尝试了我在 Whosebug 上看到的所有解决方案后,我也无法将 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 在评论中使用选择器作为输入视图的建议很好;做类似事情的更通用的方法是从屏幕底部模态显示日期选择器。
我正在尝试将 UIDatePicker 添加到一组已经存在的文本字段中。即使在尝试了我在 Whosebug 上看到的所有解决方案后,我也无法将 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 在评论中使用选择器作为输入视图的建议很好;做类似事情的更通用的方法是从屏幕底部模态显示日期选择器。