Xamarin.ios 默认情况下,在UISplitViewController上显示主控

Xamarin.ios 默认情况下,在UISplitViewController上显示主控,xamarin.ios,uisplitviewcontroller,Xamarin.ios,Uisplitviewcontroller,当我使用Visual Studio for Mac(v8.4.5)创建一个新的“主细节应用程序”时,UISplitViewController的默认行为是当细节页面以纵向模式出现在iPhone上时,首先显示细节页面 我宁愿(我想大多数人都愿意)默认显示母版页。在我的例子中,母版页是一个包含联系人列表的表视图 这个问题类似于:但是对于Xamarin.iOS 与此处建议的解决方案类似,我尝试分配一名代表但未成功: public class ContactsSplitViewControlle

当我使用Visual Studio for Mac(v8.4.5)创建一个新的“主细节应用程序”时,
UISplitViewController
的默认行为是当细节页面以纵向模式出现在iPhone上时,首先显示细节页面

我宁愿(我想大多数人都愿意)默认显示母版页。在我的例子中,母版页是一个包含联系人列表的表视图

这个问题类似于:但是对于Xamarin.iOS

与此处建议的解决方案类似,我尝试分配一名代表但未成功:

    public class ContactsSplitViewControllerDelegate : UISplitViewControllerDelegate
    {
        public override bool EventShowViewController(UISplitViewController splitViewController, UIViewController vc, NSObject sender)
        {
            return true;
        }

        public override bool EventShowDetailViewController(UISplitViewController splitViewController, UIViewController vc, NSObject sender)
        {
            return true;
        }
    }

    public partial class ContactsSplitViewController : UISplitViewController
    {
        public ContactsSplitViewController (IntPtr handle) : base (handle)
        {
            this.Delegate = new ContactsSplitViewControllerDelegate();
        }

    }

设置
首选显示模式

public override void ViewDidLoad()
{
    base.ViewDidLoad();

    this.PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible;
}

经过一些实验,似乎在代理上覆盖
CollapseSecondViewController
会起作用,尽管我还不确定这是正确的解决方案

using Foundation;
using System;
using UIKit;

namespace MasterDetailTest
{
    public class SplitViewControllerDelegate : UISplitViewControllerDelegate
    {
        public override bool CollapseSecondViewController(UISplitViewController splitViewController, UIViewController secondaryViewController, UIViewController primaryViewController)
        {
            return true;
        }
    }

    public partial class MainPageSplitViewController : UISplitViewController
    {
        public MainPageSplitViewController (IntPtr handle) : base (handle)
        {
            this.Delegate = new SplitViewControllerDelegate();
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // When implemented in my project, I found I needed to set this
            // or the delegate would not be called.
            this.SetNeedsFocusUpdate();
        }

    }
}

没有快乐。仍然提供详细页面。谢谢分享。别忘了接受答案。