Task PresentModalAsync(Page modal, bool animated) { var modalRenderer = Platform.GetRenderer(modal); if (modalRenderer == null) { modalRenderer = Platform.CreateRenderer(modal); Platform.SetRenderer(modal, modalRenderer); modalRenderer.SetElementSize(new Size(_renderer.View.Bounds.Width, _renderer.View.Bounds.Height)); } var toViewController = modalRenderer as NSViewController; var i = Math.Max(0, _renderer.ChildViewControllers.Length - 1); var fromViewController = _renderer.ChildViewControllers[i]; _renderer.AddChildViewController(toViewController); NSViewControllerTransitionOptions option = animated ? NSViewControllerTransitionOptions.SlideUp : NSViewControllerTransitionOptions.None; var task = _renderer.HandleAsyncAnimation(fromViewController, toViewController, option, () => { //Hack: adjust if needed toViewController.View.Frame = _renderer.View.Bounds; fromViewController.View.Layer.Hidden = true; }, true); return(task); }