#ios #swift #uikit #uidatepicker
#iOS #swift #uikit #uidatepicker
Вопрос:
В iOS 13.6 появилась preferredDatePickerStyle
функция, которая управляет внешним видом средства выбора даты…
как вы можете видеть, на изображении есть стрелка, указывающая на галочку, при отладке цвета не отображается ни одна метка белого цвета, поэтому скрытого объекта нет.
что нужно сделать, чтобы добавить выбор года и отобразить дни недели и месяцы?
Код
@IBOutlet weak var startDateTextField: UITextField!
lazy var startDatePicker: UIDatePicker = {
return UIDatePicker()
}()
override func viewDidLoad() {
super.viewDidLoad()
startDatePicker.datePickerMode = .date
if #available(iOS 14, *) {
startDatePicker.frame.size = .init(width: self.view.bounds.width, height: 100)
startDatePicker.preferredDatePickerStyle = .inline
startDatePicker.tintColor = .systemPink
startDatePicker.backgroundColor = .white
startDatePicker.overrideUserInterfaceStyle = .light
}
startDateTextField.inputView = startDatePicker
// Do any additional setup after loading the view.
}
Комментарии:
1. Я никогда раньше не видел нового средства выбора даты, используемого в качестве входного представления… Возможно, его нельзя использовать в качестве входного представления? Я бы просто использовал стиль wheels для представления ввода.
2. Почему textfiled и средство выбора находятся внутри его входного представления? почему бы не использовать компонент datepicker сам по себе, вот в чем суть!
Ответ №1:
Вы можете создать UIView, а затем добавить указатель даты внутри представления, вы должны отключить translatesAutoresizingMaskIntoConstraints и настроить ограничения выбора данных по мере необходимости.
// Create custom container view
let dateView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 358))
//Add DatePicker to view
dateView.addSubview(dateOfBirthPicker)
// Adding constraints to DatePicker View
dateOfBirthPicker.translatesAutoresizingMaskIntoConstraints = false
dateOfBirthPicker.topAnchor.constraint(equalTo: dateView.topAnchor, constant: 8).isActive = true
dateOfBirthPicker.leadingAnchor.constraint(equalTo: dateView.leadingAnchor, constant: 16).isActive = true
dateOfBirthPicker.centerXAnchor.constraint(equalTo: dateView.centerXAnchor).isActive = true
// add toolbar to textField
textField?.inputAccessoryView = toolbar
// finally add the inputView
textField?.inputView = dateView
Ответ №2:
Похоже, что в средстве выбора даты просто недостаточно места для полного отображения. Попробуйте установить для него translatesAutoresizingMaskIntoConstraints
значение false и разрешить его автоматический размер. В противном случае просто увеличьте рамку.