Xamarin形成iOS上未显示的MasterDetailPage菜单图标

时间:2017-04-10 15:02:30

标签: ios xaml xamarin xamarin.ios xamarin.forms

我有Xamarin.Forms项目。 我在NavigationPage里面有MasterDetailPage。 我设置了MasterDetailPage的图标属性,以便将图标设置为导航栏上的左上角位置。但它不起作用。

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        var masterDetailpage = new MasterDetailPage {
            Icon = "menuIcon.png",
            Master = new Page { Title = "Sample"},
            Detail = new Page()
        };

        MainPage = new NavigationPage(masterDetailpage);
    }
}

这永远不会奏效。如果我将NavigationPage作为MasterDetailPage的Detail属性,并在Master上设置图标。有用。 但是在NavigationPage中包含MasterDetailPage非常重要,反之亦然。

5 个答案:

答案 0 :(得分:5)

解决方案是设置Icon用于Page的{​​{1}}属性。

Master

这假设您的iOS项目中的png位于名为 var masterDetailpage = new MasterDetailPage { Master = new Page { Title = "Sample", Icon = "menuIcon.png"}, Detail = new NavigationPage(new Page()) }; 的Resources文件夹下,这是您想要的汉堡包图标。您还需要在menuIcon.png周围使用NavigationPage,因为导航栏区域中会显示Detail

答案 1 :(得分:2)

Unicode字符可用于显示“汉堡”菜单图标。

您可以为母版页面Title="☰"顶层标签指定ContentPage

如果使用图标,则可以绘制比char更好的图标。但是,如果您可以接受,使用Unicode char就足够简单了。

它适用于iOS,不会破坏Android。

链接:

答案 2 :(得分:0)

如果您将母版页包装在导航页面中,请将该图标放在导航页面上。

这对我有用:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        var masterDetailpage = new MasterDetailPage {
            Icon = "menuIcon.png",
            Master = new Page { Title = "Sample"},
            Detail = new Page()
        };

        MainPage = new NavigationPage(masterDetailpage) { Title = "Sample", Icon = "menuIcon.png" };
    }
}

答案 3 :(得分:0)

如果它对某人有帮助,您可以像下面的示例代码中一样在设置MainPage之前设置菜单标题:

var master = new MasterPage();
master.Master.Icon = "my_icon.png";
master.Master.Title = AppResources.Menu; // To get the value from resource files
MainPage = master;

MasterPage继承自MasterDetailsPage,由于Xamarin的奇怪错误,我无法直接从MasterPage构造函数设置值。

答案 4 :(得分:-1)

我认为您必须添加AddDelegate常见修复

namespace myApp.iOS
{
    [Register("AppDelegate")]
    public partial class AppDelegate : 
                         global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        UIWindow window;

        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            global::Xamarin.Forms.Forms.Init();

            // fix for iOS
            window = new UIWindow(UIScreen.MainScreen.Bounds);
            window.RootViewController = App.GetMainPage().CreateViewController();
            window.MakeKeyAndVisible();

            LoadApplication(new App());

            return base.FinishedLaunching(app, options);
        }
    }
}

App.xaml.cs的PCL项目中,您必须添加

public App()
{
    // The root page of your application
    MainPage = GetMainPage();
}

public static Page GetMainPage()
{
    return new RootPage();
}