仅在 iPhone XS 和 11plus 上发布渲染 UIDatePicker

Issue rendering UIDatePicker on iPhone XS and 11plus only

我需要在 Xamarin.Forms 项目中组合日期和时间选择器,因此我使用了自定义视图和渲染器,它在我的 iPhone 8 Plus 测试设备上运行良好。不幸的是,在 iPhone XS 或 11 Pro(物理设备,均在 13.3 上)上,选择器无法正确呈现 - 所有日期都显示为灰色,时间完全不可见但仍然存在(我能感觉到 'clicks' 在它所在的区域滑动 up/down 时)。不出所料,这两种设备的模拟器都能正确呈现。完整示例项目以及两个设备的屏幕截图 on 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;
    }
}

Xamarin Forums 上知识渊博的 ColeX 解决了这个问题。 ColeX 确实应该为此加分,但我将答案发布在这里,这样如果其他人在 SO 上搜索此问题,他们就会看到解决方案。

根本原因是 iOS 上的深色模式,当时应用未设置为在 light/dark 模式下以不同方式呈现自身。结果,OS 认为它在深色背景上呈现日期选择器,但事实并非如此,因此它实际上是不可见的。提到了 few solutions,但对我有用的是将以下内容添加到 iOS 项目中的 Info.plist:

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