From aef568a7c63577241f769a2df378a04cea944ea5 Mon Sep 17 00:00:00 2001 From: Pavel Yakovlev Date: Thu, 28 Feb 2019 04:49:11 +0300 Subject: [PATCH] [Android, iOS] added re-measure of TimePicker after change value (#4999) --- .../Issue4961.cs | 33 ++++++++++++++++++++++ .../Xamarin.Forms.Controls.Issues.Shared.projitems | 1 + .../Renderers/TimePickerRenderer.cs | 2 +- .../Renderers/TimePickerRenderer.cs | 1 + 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue4961.cs diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue4961.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue4961.cs new file mode 100644 index 0000000..38f9d48 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue4961.cs @@ -0,0 +1,33 @@ +using System; +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Github, 4961, "TimePicker does not remeasure its size when picking a new time that is wider than the previously selected value", + PlatformAffected.Android | PlatformAffected.iOS)] + public class Issue4961 : TestContentPage + { + protected override void Init() + { + Content = new StackLayout + { + Children = + { + new Label + { + Text = "When changing the Time of the TimePicker the control should be remeasured and its size may change. " + + "Set the time to 12:50 AM and check that the text does not get out of the screen." + }, + new TimePicker + { + Time = TimeSpan.FromHours(1), + HorizontalOptions = LayoutOptions.EndAndExpand, + VerticalOptions = LayoutOptions.Start + } + } + }; + } + } +} \ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index 47fde52..ab05a3c 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -19,6 +19,7 @@ Issue1588.xaml Code + diff --git a/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs index d102b6d..d0ed9fc 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/TimePickerRenderer.cs @@ -41,7 +41,6 @@ namespace Xamarin.Forms.Platform.Android void TimePickerDialog.IOnTimeSetListener.OnTimeSet(ATimePicker view, int hourOfDay, int minute) { ElementController.SetValueFromRenderer(TimePicker.TimeProperty, new TimeSpan(hourOfDay, minute, 0)); - ElementController.SetValueFromRenderer(VisualElement.IsFocusedPropertyKey, false); if (Forms.IsLollipopOrNewer) @@ -134,6 +133,7 @@ namespace Xamarin.Forms.Platform.Android { var timeFormat = Is24HourView ? "HH:mm" : Element.Format; EditText.Text = DateTime.Today.Add(time).ToString(timeFormat); + Element.InvalidateMeasureNonVirtual(Internals.InvalidationTrigger.MeasureChanged); } void UpdateFont() diff --git a/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs index fd41a16..6d85dba 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/TimePickerRenderer.cs @@ -159,6 +159,7 @@ namespace Xamarin.Forms.Platform.iOS { _picker.Date = new DateTime(1, 1, 1).Add(Element.Time).ToNSDate(); Control.Text = DateTime.Today.Add(Element.Time).ToString(Element.Format); + Element.InvalidateMeasureNonVirtual(Internals.InvalidationTrigger.MeasureChanged); } } } \ No newline at end of file -- 2.7.4