我试图将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在评论中建议将选择器用作输入视图,这是一个很好的建议;执行类似操作的更通用方法是从屏幕底部模态显示日期选择器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句