[iOS] Avoid using DrawRect on base VisualElementRenderer (#570)
authorRui Marinho <me@ruimarinho.net>
Wed, 30 Nov 2016 20:09:57 +0000 (20:09 +0000)
committerJason Smith <jason.smith@xamarin.com>
Wed, 30 Nov 2016 20:09:57 +0000 (12:09 -0800)
* [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

Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla48158.cs [new file with mode: 0644]
Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
Xamarin.Forms.Platform.iOS/Renderers/BoxRenderer.cs
Xamarin.Forms.Platform.iOS/VisualElementRenderer.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 (file)
index 0000000..07f1c8c
--- /dev/null
@@ -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
index 138e425..3b728f4 100644 (file)
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla39489.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla36802.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Bugzilla35736.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Bugzilla48158.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="$(MSBuildThisFileDirectory)Bugzilla22229.xaml">
index 466773b..f2b9253 100644 (file)
@@ -26,6 +26,8 @@ namespace Xamarin.Forms.Platform.iOS
                {
                        if (_previousSize != Bounds.Size)
                                SetNeedsDisplay();
+
+                       base.LayoutSubviews();
                }
 
                protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e)
index b4a60f6..bb97185 100644 (file)
@@ -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()