встроенный предпочтительный стиль выбора даты неправильно отображает месяцы и дни недели

#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 и разрешить его автоматический размер. В противном случае просто увеличьте рамку.