UIDatePicker dejó de funcionar Xamarin IOS14
Desde que actualicé a Xcode 12 y VS (2019 8.7.8 build 4) en mi mac y actualicé Xamarin a la última versión (Xamarin.iOS 14.0.0.0), encuentro que no puedo usar UIDatePicker.
Selector de fechas
Mirando la documentación, https://developer.apple.com/documentation/uikit/uidatepicker Necesito establecer Style y tal vez favoriteDatePickerStyle pero tampoco son propiedades que pueda establecer en el código (Xamarin).
¿Alguien ha encontrado una manera de superar esto para permitir que se seleccione la fecha?
Respuestas
Funcionará una vez que establezcamos preferredDatePickerStyley sizeToFit, el código de muestra se proporciona a continuación.
_datePicker = new UIDatePicker(new CGRect(0, 30, 0, 0));
_datePicker.AutoresizingMask = UIViewAutoresizing.FlexibleRightMargin;
_datePicker.Frame = new CGRect(_datePicker.Frame.Location, new CGSize(300, _datePicker.Frame.Size.Height));
_datePicker.Mode = _datePickerMode;
_datePicker.Date = (NSDate)_defaultDate;
_datePicker.PreferredDatePickerStyle = UIDatePickerStyle.Wheels; //Add this in ios14
_datePicker.SizeToFit(); //Add this in ios14
Lo he resuelto con esto:
_datePicker.SetValueForKey(new NSNumber(1), new NSString("preferredDatePickerStyle"));
Ahora muestra el selector correcto
Selector de fecha
También encontré este interesante problema recientemente. Cuando usamos Xcode 12 para empaquetarlo, todo era normal, pero al cambiar a Xcode 12 y superior para la selección y visualización de la fecha de empaquetado, parecería anormal.
Porque iOS 13.4 UIDatePicker tiene nuevas funciones
- @property (no atómico, leer y escribir, asignar) UIDatePickerStyle favoriteDatePickerStyle API_AVAILABLE (ios (13.4)) API_UNAVAILABLE (tvos, watchos);
Si desea mantener el estilo original, puede agregar este código
_datePick = [[UIDatePicker alloc] init];
if (@available(iOS 13.4, *)) {
_datePick.preferredDatePickerStyle = UIDatePickerStyleWheels;
}
Básicamente Estoy armando todos los detalles de las otras respuestas a la aplicación correspondiente public class CustomDatePickerRenderer : DatePickerRendererpara formularios Xamarin en IOS (omitido mi implementación de CreateNativeControl, OnElementPropertyChangedy métodos personalizados para abreviar):
protected override void OnElementChanged(ElementChangedEventArgs<DatePicker> e)
{
const int iosVersionMajorForDatePickerStyleFeature = 13;
const int iosVersionMinorForDatePickerStyleFeature = 4;
base.OnElementChanged(e);
if (e.OldElement != null || Element == null)
{
return;
}
//Switch back to the Wheels style for the datePicker (in iOS 14 the default of Automatic uses the Compact style)
if (UIDevice.CurrentDevice.CheckSystemVersion(iosVersionMajorForDatePickerStyleFeature, iosVersionMinorForDatePickerStyleFeature)
&& Control?.InputView is UIDatePicker datePicker && datePicker.PreferredDatePickerStyle != UIDatePickerStyle.Wheels)
{
datePicker.PreferredDatePickerStyle = UIDatePickerStyle.Wheels;
datePicker.SizeToFit();
}
//Do whatever other customization is desired
//UpdateBorderColor();
//UpdateBorderWidth();
//UpdateCornerRadius();
//UpdatePadding();
}