我在弄清楚如何正确更新 iOS 上的 DatePicker 现有的自定义渲染器以显示具有不同首选样式的 DatePicker 时遇到了一些困难,如本文中所述(尽管它是针对 swift)https://medium.com/better-programming/introducing-swifts-new-modern-date-picker-37bb5e0a106
我的渲染器如下:
public class BorderlessDatePickerRenderer : DatePickerRenderer
{
public override void LayoutSubviews()
{
base.LayoutSubviews();
var element = Element as BorderlessDatePicker;
Control.BorderStyle = UITextBorderStyle.None;
if (element.Date.Year == 1900) {
Control.Text = "";
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
var element = Element as BorderlessDatePicker;
if (Control != null && element.Date.Year == 1900) {
Control.Text = "";
}
}
BorderlessDatePicker 本身只是一个扩展 DatePicker Xamarin.Forms 控件的空类。我的问题的根源在于,我不确定如何在 Control 对象上正确设置 PreferredDatePickerStyle ,因为 Control 是一个 UITextField 而不是 UIDatePicker。本质上,我想做的不是使用似乎是 iOS 14 默认的 compact
样式显示日期选择器,而是希望将其显示为 wheels
code> 而不是做类似的事情:
PreferredDatePickerStyle = UIDatePickerStyle.Wheels;
最佳答案
经过更多研究并浏览 xamarin github,我发现了这个解决方案:
protected override void OnElementChanged(ElementChangedEventArgs<DatePicker> e)
{
base.OnElementChanged(e);
if(e.NewElement != null && this.Control != null)
{
try
{
if (UIDevice.CurrentDevice.CheckSystemVersion(14, 0))
{
UIDatePicker picker = (UIDatePicker)Control.InputView;
picker.PreferredDatePickerStyle = UIDatePickerStyle.Wheels;
}
} catch (Exception ex)
{
Log.Error(ex, "Failed to set PreferredDatePickerStyle to be UIDatePickerStyle.Wheels for iOS 14.0+");
}
}
}
关于xamarin.forms - iOS 14 DatePicker 渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64827636/