diff options
Diffstat (limited to 'Xamarin.Forms.Platform.iOS')
-rw-r--r-- | Xamarin.Forms.Platform.iOS/Renderers/ListViewRenderer.cs | 12 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs | 10 |
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); } |