summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.iOS
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Platform.iOS')
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/ListViewRenderer.cs12
-rw-r--r--Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs10
2 files changed, 18 insertions, 4 deletions
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/ListViewRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/ListViewRenderer.cs
index d060e7f5..3c5bcb10 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/ListViewRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/ListViewRenderer.cs
@@ -690,8 +690,18 @@ namespace Xamarin.Forms.Platform.iOS
foreach (Element descendant in target.Descendants())
{
IVisualElementRenderer renderer = Platform.GetRenderer(descendant as VisualElement);
+
+ // Clear renderer from descendent; this will not happen in Dispose as normal because we need to
+ // unhook the Element from the renderer before disposing it.
descendant.ClearValue(Platform.RendererProperty);
- renderer?.Dispose();
+
+ if (renderer != null)
+ {
+ // Unhook Element (descendant) from renderer before Disposing so we don't set the Element to null
+ renderer.SetElement(null);
+ renderer.Dispose();
+ renderer = null;
+ }
}
return (nfloat)req.Request.Height;
diff --git a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
index 3fcb3ff1..d63385d3 100644
--- a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
@@ -251,9 +251,13 @@ namespace Xamarin.Forms.Platform.MacOS
_packager = null;
}
- Platform.SetRenderer(Element, null);
- SetElement(null);
- Element = null;
+ // The ListView can create renderers and unhook them from the Element before Dispose is called.
+ // Thus, it is possible that this work is already completed.
+ if (Element != null)
+ {
+ Platform.SetRenderer(Element, null);
+ SetElement(null);
+ }
}
base.Dispose(disposing);
}