UIViewController CreateViewController(int index) { Xamarin.Forms.View formsView = null; object bindingContext = null; if (Element.ItemsSource != null) { bindingContext = Element.ItemsSource.Cast <object> ().ElementAt(index); } var selector = Element.ItemTemplate as DataTemplateSelector; if (selector != null) { formsView = (Xamarin.Forms.View)selector.SelectTemplate(bindingContext, Element).CreateContent(); } else { formsView = (Xamarin.Forms.View)Element.ItemTemplate.CreateContent(); } formsView.BindingContext = bindingContext; // UIScreen.MainScreen.Bounds.Width, UIScreen.MainScreen.Bounds.Height var rect = new CGRect(Element.X, Element.Y, ElementWidth, ElementHeight); var nativeConverted = FormsViewToNativeiOS.ConvertFormsToNative(formsView, rect); var viewController = new ViewContainer(); viewController.Tag = index; viewController.View = nativeConverted; return(viewController); }
UIViewController CreateViewController(int index) { View formsView = null; object bindingContext = null; if (Source != null && Source?.Count > 0) { bindingContext = Source.Cast <object>().ElementAt(index); } var dt = bindingContext as DataTemplate; // Support for List<DataTemplate> as ItemsSource if (dt != null) { formsView = (View)dt.CreateContent(); } else { var selector = Element.ItemTemplate as DataTemplateSelector; if (selector != null) { formsView = (View)selector.SelectTemplate(bindingContext, Element).CreateContent(); } else { formsView = (View)Element.ItemTemplate.CreateContent(); } formsView.BindingContext = bindingContext; } // HeightRequest fix formsView.Parent = this.Element; // UIScreen.MainScreen.Bounds.Width, UIScreen.MainScreen.Bounds.Height var rect = new CGRect(Element.X, Element.Y, ElementWidth, ElementHeight); var nativeConverted = formsView.ToiOS(rect); var viewController = new ViewContainer(); viewController.Tag = bindingContext; viewController.View = nativeConverted; return(viewController); }
UIViewController CreateViewController(int index) { // Significant Memory Leak for iOS when using custom layout for page content #125 var newTag = Source[index]; foreach (ViewContainer child in pageController.ChildViewControllers) { if (child.Tag == newTag) { return(child); } } View formsView = null; object bindingContext = null; if (Source != null && Source?.Count > 0) { bindingContext = Source.Cast <object>().ElementAt(index); } var dt = bindingContext as DataTemplate; // Support for List<View> as ItemsSource var view = bindingContext as View; // Support for List<DataTemplate> as ItemsSource if (dt != null) { formsView = (View)dt.CreateContent(); } else { if (view != null) { if (ChildViewControllers == null) { ChildViewControllers = new List <ViewContainer>(); } // Return from the local copy of controllers foreach (ViewContainer controller in ChildViewControllers) { if (controller.Tag == view) { return(controller); } } formsView = view; } else { var selector = Element.ItemTemplate as DataTemplateSelector; if (selector != null) { formsView = (View)selector.SelectTemplate(bindingContext, Element).CreateContent(); } else { formsView = (View)Element.ItemTemplate.CreateContent(); } formsView.BindingContext = bindingContext; } } // HeightRequest fix formsView.Parent = this.Element; // UIScreen.MainScreen.Bounds.Width, UIScreen.MainScreen.Bounds.Height var rect = new CGRect(Element.X, Element.Y, ElementWidth, ElementHeight); var nativeConverted = formsView.ToiOS(rect); //if (dt == null && view == null) //formsView.Parent = null; var viewController = new ViewContainer(); viewController.Tag = bindingContext; viewController.View = nativeConverted; // Only happens when ItemsSource is List<View> if (ChildViewControllers != null) { ChildViewControllers.Add(viewController); Console.WriteLine("ChildViewControllers count = " + ChildViewControllers.Count()); } return(viewController); }