protected virtual void OnElementChanged(VisualElementChangedEventArgs e)
        {
            if (e.OldElement != null)
            {
                e.OldElement.PropertyChanged -= HandlePropertyChanged;
            }
            if (e.NewElement != null)
            {
                e.NewElement.PropertyChanged += HandlePropertyChanged;
            }
            if (UIDevice.CurrentDevice.Orientation == UIDeviceOrientation.LandscapeLeft || UIDevice.CurrentDevice.Orientation == UIDeviceOrientation.LandscapeRight)
            {
                PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible;
            }
            else if (UIDevice.CurrentDevice.Orientation == UIDeviceOrientation.Portrait || UIDevice.CurrentDevice.Orientation == UIDeviceOrientation.PortraitUpsideDown)
            {
                PreferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryOverlay;
            }
            MasterWidth = 400;
            MasterDetailPage.Master.WidthRequest = 400;

            MasterDetailPage.UpdateMasterBehavior();
            var changed = ElementChanged;

            if (changed != null)
            {
                changed(this, e);
            }
            UpdateControllers();
        }
        public override void WillRotate(UIInterfaceOrientation toInterfaceOrientation, double duration)
        {
            // On IOS8 the MasterViewController ViewAppear/Disappear weren't being called correctly after rotation
            // We now close the Master by using the new SplitView API, basicly we set it to hidden and right back to the Normal/AutomaticMode
            if (!MasterDetailPage.ShouldShowSplitMode && _masterVisible)
            {
                MasterDetailPage.CanChangeIsPresented = true;
                PreferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryHidden;
                PreferredDisplayMode = UISplitViewControllerDisplayMode.Automatic;
            }

            MasterDetailPage.UpdateMasterBehavior();
            MessagingCenter.Send <IVisualElementRenderer>(this, NavigationRenderer.UpdateToolbarButtons);
            base.WillRotate(toInterfaceOrientation, duration);
        }
示例#3
0
        void UpdateMasterBehavior(CGSize newBounds)
        {
            MasterDetailPage masterDetailPage = _masterDetailPage ?? Element as MasterDetailPage;

            if (masterDetailPage == null)
            {
                return;
            }

            bool isPortrait = newBounds.Height > newBounds.Width;
            var  previous   = PreferredDisplayMode;

            switch (masterDetailPage.MasterBehavior)
            {
            case MasterBehavior.Split:
                PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible;
                break;

            case MasterBehavior.Popover:
                PreferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryHidden;
                break;

            case MasterBehavior.SplitOnPortrait:
                PreferredDisplayMode = (isPortrait) ? UISplitViewControllerDisplayMode.AllVisible : UISplitViewControllerDisplayMode.PrimaryHidden;
                break;

            case MasterBehavior.SplitOnLandscape:
                PreferredDisplayMode = (!isPortrait) ? UISplitViewControllerDisplayMode.AllVisible : UISplitViewControllerDisplayMode.PrimaryHidden;
                break;

            default:
                PreferredDisplayMode = UISplitViewControllerDisplayMode.Automatic;
                break;
            }

            if (previous == PreferredDisplayMode)
            {
                return;
            }

            if (!MasterDetailPage.ShouldShowSplitMode)
            {
                MasterDetailPage.CanChangeIsPresented = true;
            }

            MasterDetailPage.UpdateMasterBehavior();
        }
示例#4
0
        public override void WillRotate(UIInterfaceOrientation toInterfaceOrientation, double duration)
        {
            // I tested this code on iOS9+ and it's never called
            if (!System.Maui.Maui.IsiOS9OrNewer)
            {
                if (!MasterDetailPage.ShouldShowSplitMode && IsMasterVisible)
                {
                    MasterDetailPage.CanChangeIsPresented = true;
                    PreferredDisplayMode = UISplitViewControllerDisplayMode.PrimaryHidden;
                    PreferredDisplayMode = UISplitViewControllerDisplayMode.Automatic;
                }

                MasterDetailPage.UpdateMasterBehavior();
                MessagingCenter.Send <IVisualElementRenderer>(this, NavigationRenderer.UpdateToolbarButtons);
            }

            base.WillRotate(toInterfaceOrientation, duration);
        }