2017-04-10 85 views
2

我有Xamarin.Forms项目。 我在NavigationPage里有MasterDetailPage。 我设置了MasterDetailPage的图标属性,以便图标应该设置为导航栏的左上角位置。但它不起作用。Xamarin形式MasterDetailPage菜单图标不在iOS上显示

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而非反之亦然。

+0

我可能是错的。但Xamarin Docs仅在Master Detail Pages中显示适用于Android版本的Page Icons,或者您的意思是别的? https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/navigation/master-detail-page/ – Lepidopteron

+0

默认情况下,iOS上的图标未显示,但您通常可以在iOS上添加图标并将其添加为该页面的图标属性。它适用于某些情况,但不适用于我的情况。 –

+0

导航页面是否可能以某种方式覆盖此属性设置? – Lepidopteron

回答

-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); 
     } 
    } 
} 

在你PCL项目App.xaml.cs你必须添加

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

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

不幸的是,这是误导,并没有解决问题。你提出的代码对于LoadApplication正在做什么和base.FinishedLaunching调用是多余的。 – therealjohn

2

解决的办法是设置的的Icon财产Page用于Master

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

这里假设你在名为menuIcon.png资源文件夹这是你想要的汉堡包图标下您的iOS项目有一个PNG。您还需要在Detail周围使用NavigationPage,因为Icon显示在导航栏区域中。

+0

谢谢,但如果你在最后看到我的问题,我写下你写的内容。但是这种结构的工作方式不同,这就是为什么我想在NavigationPage中拥有MasterDetailPage而不是你提到的方式 –

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" }; 
    } 
}