Ошибка рендеринга UIDatePicker только на iPhone XS и 11plus - PullRequest
0 голосов
/ 27 января 2020

Мне нужен комбинированный указатель даты и времени в проекте Xamarin.Forms, поэтому я использовал собственный View & Renderer, который прекрасно работает на моем тестовом устройстве iPhone 8 Plus. К сожалению, на iPhone XS или 11 Pro (физические устройства, оба на 13.3) средство выбора не отображает правильно - все даты неактивны, а время полностью невидимо, но присутствует (я чувствую «щелчки» при смахивании вверх) / вниз в области, где это будет). Неудивительно, что симулятор для обоих этих устройств отображается правильно. Полный пример проекта вместе со скриншотами с обоих устройств на GitHub . Вот соответствующий код от средства визуализации на случай, если что-нибудь выпадет:

protected override void OnElementChanged(ElementChangedEventArgs<MyDatePicker> e)
{
    base.OnElementChanged(e);

    if (e.OldElement != null)
    {
        _datePicker.ValueChanged -= DatePickerOnValueChanged;
    }

    if (e.NewElement != null)
    {
        if (Control == null)
        {
            _datePicker = new UIDatePicker(new CGRect(
                e.NewElement.Bounds.X,
                e.NewElement.Bounds.Y,
                e.NewElement.Bounds.Width,
                e.NewElement.Bounds.Height
             ));
            _datePicker.Mode = UIDatePickerMode.DateAndTime;
            _datePicker.Date = (NSDate) Element.Date;
            _datePicker.MaximumDate = (NSDate) Element.Date.AddDays(1);
            _datePicker.MinimumDate = (NSDate) Element.Date.Subtract(TimeSpan.FromDays(5));
            _datePicker.MinuteInterval = 1;

            SetNativeControl(_datePicker);
        }

        _datePicker.ValueChanged += DatePickerOnValueChanged;
    }
}

1 Ответ

0 голосов
/ 28 января 2020

Эта проблема была решена чрезвычайно осведомленным ColeX на форумах Xamarin . ColeX действительно должен получить очки за это, но я выкладываю ответ здесь, чтобы, если кто-то еще ищет эту проблему на SO, он нашел решение.

Причина root - темный режим на iOS, когда приложение не настроено на визуализацию по-другому для светлого / темного режима. В результате ОС считает, что она отображает средство выбора даты на темном фоне, которого не было, и поэтому оно было фактически невидимым. Есть упомянутое несколько решений , но мне помогло добавить следующее в Info.plist в проекте iOS:

<key>UIUserInterfaceStyle</key>
<string>Light</string>
...