public static void DisposeModelAndChildrenRenderers(this VisualElement view) { IVisualElementRenderer renderer; foreach (var child in view.Descendants().OfType <VisualElement>()) { renderer = XFPlatform.GetRenderer(child); XFPlatform.SetRenderer(child, null); if (renderer == null) { continue; } renderer.NativeView.RemoveFromSuperview(); renderer.Dispose(); } renderer = XFPlatform.GetRenderer(view); if (renderer != null) { renderer.NativeView.RemoveFromSuperview(); renderer.Dispose(); } XFPlatform.SetRenderer(view, null); }
/// <summary> /// Updates the master detail containers. /// </summary> void UpdateMasterDetailContainers() { //((MasterDetailPage)Element).Master.PropertyChanged -= HandleMasterPropertyChanged; EmptyContainers(); if (CurrentPlatform.GetRenderer(((MasterDetailPage)Element).Master) == null) { CurrentPlatform.SetRenderer(((MasterDetailPage)Element).Master, CurrentPlatform.CreateRenderer(((MasterDetailPage)Element).Master)); } if (CurrentPlatform.GetRenderer(((MasterDetailPage)Element).Detail) == null) { CurrentPlatform.SetRenderer(((MasterDetailPage)Element).Detail, CurrentPlatform.CreateRenderer(((MasterDetailPage)Element).Detail)); } var masterRenderer = CurrentPlatform.GetRenderer(((MasterDetailPage)Element).Master); var detailRenderer = CurrentPlatform.GetRenderer(((MasterDetailPage)Element).Detail); //((MasterDetailPage)Element).Master.PropertyChanged += HandleMasterPropertyChanged; this.MenuViewController.View.AddSubview(masterRenderer.NativeView); this.MenuViewController.AddChildViewController(masterRenderer.ViewController); this.RootViewController.View.AddSubview(detailRenderer.NativeView); this.RootViewController.AddChildViewController(detailRenderer.ViewController); SetNeedsStatusBarAppearanceUpdate(); }
public static IVisualElementRenderer GetOrCreateRenderer(this VisualElement bindable) { var renderer = XFPlatform.GetRenderer(bindable); if (renderer == null) { renderer = XFPlatform.CreateRenderer(bindable); XFPlatform.SetRenderer(bindable, renderer); } return(renderer); }
public override UIViewController ChildViewControllerForStatusBarHidden() { if (((MasterDetailPage)Element).Detail != null) { return((UIViewController)CurrentPlatform.GetRenderer(((MasterDetailPage)Element).Detail)); } else { return(base.ChildViewControllerForStatusBarHidden()); } }
void SetupPage(Page page, int index) { IVisualElementRenderer renderer = Platform.GetRenderer(page); if (renderer == null) { renderer = Platform.CreateRenderer(page); Platform.SetRenderer(page, renderer); } page.PropertyChanged -= OnPagePropertyChanged; page.PropertyChanged += OnPagePropertyChanged; }
void SetControllers() { var list = new List <UIViewController>(); var titles = new List <string>(); for (var i = 0; i < Tabbed.Children.Count; i++) { var child = Tabbed.Children[i]; //var width = DeviceDisplay.MainDisplayInfo.Width - 64; //child.WidthRequest = width; //var v = child as VisualElement; //if (v == null) // continue; var renderer = Platform.GetRenderer(child); if (renderer == null) { continue; } //var frameOld = renderer.ViewController.View.Frame; //frameOld.Width = (nfloat)width; //renderer.ViewController.View.Frame = frameOld; list.Add(renderer.ViewController); titles.Add(Tabbed.Children[i].Title); } ViewControllers = list.ToArray(); var menuitems = Tabbed.Children.Select(x => new Shared.MenuItem() { Title = x.Title, IconImageSource = x.IconImageSource }).ToList(); TabBar.SetData(menuitems); }
public override UIViewController ChildViewControllerForStatusBarHidden() { return((UIViewController)Platform.GetRenderer(Current)); }
void LayoutChildren(bool animated) { var frame = Element.Bounds.ToRectangleF(); var flyoutFrame = frame; nfloat opacity = 1; flyoutFrame.Width = (int)(Math.Min(flyoutFrame.Width, flyoutFrame.Height) * 0.8); var detailRenderer = Platform.GetRenderer(FlyoutPage.Detail); if (detailRenderer == null) { return; } var detailView = detailRenderer.ViewController.View; var isRTL = (Element as IVisualElementController)?.EffectiveFlowDirection.IsRightToLeft() == true; if (isRTL) { flyoutFrame.X = (int)(flyoutFrame.Width * .25); } _flyoutController.View.Frame = flyoutFrame; var target = frame; if (Presented) { target.X += flyoutFrame.Width; if (_applyShadow) { opacity = 0.5f; } } if (isRTL) { target.X = target.X * -1; } if (animated) { UIView.BeginAnimations("Flyout"); var view = _detailController.View; view.Frame = target; detailView.Layer.Opacity = (float)opacity; UIView.SetAnimationCurve(UIViewAnimationCurve.EaseOut); UIView.SetAnimationDuration(250); UIView.CommitAnimations(); } else { _detailController.View.Frame = target; detailView.Layer.Opacity = (float)opacity; } FlyoutPage.FlyoutBounds = new Rectangle(flyoutFrame.X, 0, flyoutFrame.Width, flyoutFrame.Height); FlyoutPage.DetailBounds = new Rectangle(0, 0, frame.Width, frame.Height); if (Presented) { _clickOffView.Frame = _detailController.View.Frame; } }
UIViewController GetViewController(Page page) { var renderer = Platform.GetRenderer(page); return(renderer?.ViewController); }
public void SetCustomContent(View content) { if (content == Content) { return; } removeScolledEvent?.Invoke(); removeScolledEvent = null; if (Content != null) { var oldRenderer = Platform.GetRenderer(Content); var oldContentView = ContentView; var oldContent = Content; Content = null; ContentView = null; oldContent.ClearValue(Platform.RendererProperty); oldContentView?.RemoveFromSuperview(); oldRenderer?.Dispose(); } // If the user hasn't defined custom content then only the ContentView is set else if (ContentView != null) { var oldContentView = ContentView; ContentView = null; oldContentView.RemoveFromSuperview(); } Content = content; if (Content != null) { var renderer = Platform.CreateRenderer(Content); ContentView = renderer.NativeView; Platform.SetRenderer(Content, renderer); ContentView.ClipsToBounds = true; // not sure if there's a more efficient way to do this // I can test the native control to see if it inherits from UIScrollView // But the CollectionViewRenderer doesn't inherit from UIScrollView if (Content is ScrollView sv) { sv.Scrolled += ScrollViewScrolled; removeScolledEvent = () => sv.Scrolled -= ScrollViewScrolled; void ScrollViewScrolled(object sender, ScrolledEventArgs e) => OnScrolled((nfloat)sv.ScrollY); } else if (Content is CollectionView cv) { cv.Scrolled += CollectionViewScrolled; removeScolledEvent = () => cv.Scrolled -= CollectionViewScrolled; void CollectionViewScrolled(object sender, ItemsViewScrolledEventArgs e) => OnScrolled((nfloat)e.VerticalOffset); } else if (Content is ListView lv) { lv.Scrolled += ListViewScrolled; removeScolledEvent = () => lv.Scrolled -= ListViewScrolled; void ListViewScrolled(object sender, ScrolledEventArgs e) => OnScrolled((nfloat)e.ScrollY); } } }
public void SetElement(VisualElement element) { //-------------------------------------------- // Initialize vars //-------------------------------------------- if (this._tracker == null) { _tracker = new VisualElementTracker(this); } if (this._events == null) { _events = new EventTracker(this); _events.LoadEvents(View); } //-------------------------------------------- // Reset the old element //-------------------------------------------- var oldElement = this.Element; if (oldElement != null) { oldElement.SizeChanged -= PageOnSizeChanged; oldElement.PropertyChanged -= HandlePropertyChanged; } //-------------------------------------------- // Assign the new element //-------------------------------------------- this.Element = element; this.Element.SizeChanged += PageOnSizeChanged; this.Element.PropertyChanged += HandlePropertyChanged; this.Presented = ((MasterDetailPage)Element).IsPresented; //-------------------------------------------- // Setup the root and menu view controller //-------------------------------------------- this.RootViewController = new ChildViewController(); this.LeftViewController = new ChildViewController(); this.RightViewController = new ChildViewController(); //-------------------------------------------- // Fire the element changed event //-------------------------------------------- OnElementChanged(new VisualElementChangedEventArgs(oldElement, element)); //-------------------------------------------- // Update the view //-------------------------------------------- /* Master Detail Container */ UpdateMasterDetailContainers(); /* Background */ UpdateBackground(); /* Menu Background */ UpdateMenuBackground(); /* Menu Width */ UpdateMenuWidth(); /* Menu Presentation Style */ UpdateMenuPresentationStyle(); /* Swipe Range */ UpdateSwipeRange(); //-------------------------------------------- // Attempt to automatically create a menu click event //-------------------------------------------- var detailRenderer = CurrentPlatform.GetRenderer((element as MasterDetailPage).Detail) as UINavigationController; if (detailRenderer != null) { UIViewController firstPage = detailRenderer?.ViewControllers.FirstOrDefault(); firstPage.NavigationItem.LeftBarButtonItem.Clicked += HandleMenuIcon_Clicked; } //EffectUtilities.RegisterEffectControlProvider(this, oldElement, element); //if (element != null) // element.SendViewInitialized(NativeView); }