J'essaie de créer une application multiplateforme à l'aide de C # et Xamarin.Forms. Il contient un menu déroulant implémenté sous la forme d'un fichier MasterDetailPage
. Alors que sur Android, il y a un bouton avec l'icône de l'application dans le coin supérieur gauche, qui fait basculer la page coulissante, il n'y a pas un tel élément de barre de navigation sur iOS.
Je l'ai décomposé en l'exemple minimum suivant dérivé du modèle de solution Xamarin «Application vierge (Xamarin.Forms Shared)» et en remplaçant l'implémentation de la App
-class:
public class App
{
static MasterDetailPage MDPage;
public static Page GetMainPage()
{
return new NavigationPage(
MDPage = new MasterDetailPage {
Master = new ContentPage {
Title = "Master",
Content = new StackLayout {
Children = { Link("A"), Link("B"), Link("C") }
},
},
Detail = new ContentPage { Content = new Label { Text = "A" } },
});
}
static Button Link(string name)
{
var button = new Button { Text = name };
button.Clicked += delegate {
MDPage.Detail = new ContentPage { Content = new Label { Text = name } };
MDPage.IsPresented = false;
};
return button;
}
}
La solution ainsi que les captures d'écran résultantes peuvent être trouvées sur GitHub .
Mon idée était d'ajouter un tel bouton "menu" ou "retour" dans le code spécifique à iOS en modifiant le window.RootViewController.NavigationController.NavigationBar
dans la AppDelegate
classe. Mais window.RootViewController.NavigationController
est null
.
Le remplacement du type de retour GetMainPage()
par NavigationPage
au lieu de Page
n'aide pas.
Je pourrais ajouter des éléments de la barre d'outils via MDPage.ToolbarItems.Add(...)
, mais ils apparaissent dans le coin supérieur droit .
J'ai finalement trouvé une solution. Le code nécessite essentiellement deux corrections mineures:
DetailPage
s dans un NavigationPage
, mais pas le MasterDetailPage
(voir # 1, # 2 et # 3 ci-dessous).Icon
au MasterPage
quand sur iOS (voir # 4 ci-dessous). N'oubliez pas d'ajouter le PNG (!) Aux ressources iOS.L'exemple de travail minimum est le suivant:
public static class App
{
static MasterDetailPage MDPage;
public static Page GetMainPage()
{
return MDPage = new MasterDetailPage { // #1
Master = new ContentPage {
Title = "Master",
Icon = Device.OS == TargetPlatform.iOS ? "menu.png" : null, // #4
Content = new StackLayout {
Children = { Link("A"), Link("B"), Link("C") }
},
},
Detail = new NavigationPage(new ContentPage { Content = new Label { Text = "A" } }), // #2
};
}
static Button Link(string name)
{
var button = new Button { Text = name };
button.Clicked += delegate {
MDPage.Detail = new NavigationPage(new ContentPage { Content = new Label { Text = name } }); // #3
MDPage.IsPresented = false;
};
return button;
}
}
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots