From ccef9cbaa45aed957e44864033fffa815b521d6b Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Wed, 30 Nov 2016 20:09:57 +0000 Subject: [iOS] Avoid using DrawRect on base VisualElementRenderer (#570) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Controls] Add retro for Bugzilla 48158 * [iOS] Avoid using DrawRect as this will make some properties not being applied to the layer * [iOS] Make sure BoxRenderer calls base LayoutSubviews * [iOS] Better fix for adding the Blur effect and avoid override draw’s * [Controls] Remove extra nunit category --- .../Bugzilla48158.cs | 29 ++++++++++++++++++++++ .../Xamarin.Forms.Controls.Issues.Shared.projitems | 1 + .../Renderers/BoxRenderer.cs | 2 ++ .../VisualElementRenderer.cs | 11 ++++---- 4 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla48158.cs diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla48158.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla48158.cs new file mode 100644 index 00000000..07f1c8c9 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla48158.cs @@ -0,0 +1,29 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls.Issues +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 48158, "Hidden controls become transparent, needs manual verification", PlatformAffected.iOS)] + public class Bugzilla48158 : TestContentPage // or TestMasterDetailPage, etc ... + { + protected override void Init() + { + var grdInner = new Grid { BackgroundColor = Color.Red, IsVisible = false, Padding = new Thickness(10) }; + var btn = new Button { Text = "Click and verify background is red" }; + btn.Clicked += (s, e) => + { + grdInner.IsVisible = !grdInner.IsVisible; + }; + var grd = new Grid(); + grd.Children.Add(grdInner); + grd.Children.Add(btn); + Content = grd; + } + } +} \ 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 138e4257..3b728f4d 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 @@ -463,6 +463,7 @@ + diff --git a/Xamarin.Forms.Platform.iOS/Renderers/BoxRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/BoxRenderer.cs index 466773b5..f2b92530 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/BoxRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/BoxRenderer.cs @@ -26,6 +26,8 @@ namespace Xamarin.Forms.Platform.iOS { if (_previousSize != Bounds.Size) SetNeedsDisplay(); + + base.LayoutSubviews(); } protected override void OnElementChanged(ElementChangedEventArgs e) diff --git a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs index b4a60f63..bb971858 100644 --- a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs @@ -170,17 +170,16 @@ namespace Xamarin.Forms.Platform.iOS return new SizeF(0, 0); } - public override void Draw(RectangleF rect) + public override void LayoutSubviews() { - base.Draw(rect); - if (_blur != null) + base.LayoutSubviews(); + if (_blur != null && Superview != null) { - _blur.Frame = rect; + _blur.Frame = Bounds; if (_blur.Superview == null) Superview.Add(_blur); } } - protected override void Dispose(bool disposing) { if ((_flags & VisualElementRendererFlags.Disposed) != 0) @@ -289,7 +288,7 @@ namespace Xamarin.Forms.Platform.iOS } _blur = new UIVisualEffectView(blurEffect); - SetNeedsDisplay(); + LayoutSubviews(); } protected virtual void UpdateNativeWidget() -- cgit v1.2.3