Fal*_*lko 8 master-detail navigationbar ios xamarin xamarin.forms
我正在尝试使用C#和Xamarin.Forms构建一个跨平台的应用程序.它包含一个以幻灯片形式实现的滑出菜单MasterDetailPage
.在Android上,左上角有一个带有应用程序图标的按钮,用于切换滑出页面,iOS上没有这样的导航栏项目.
我将其分解为以下从Xamarin解决方案模板"Blank App(Xamarin.Forms Shared)"派生的最小示例,并替换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;
}
}
Run Code Online (Sandbox Code Playgroud)
可以在GitHub上找到解决方案以及生成的屏幕截图.
我的想法是,添加这样的"菜单"或"后退"按钮在特定的iOS代码修改window.RootViewController.NavigationController.NavigationBar
的内部AppDelegate
类.不过window.RootViewController.NavigationController
是null
.
更换的返回类型GetMainPage()
的NavigationPage
,而不是Page
没有帮助.
我可以通过添加工具栏项目MDPage.ToolbarItems.Add(...)
,但它们出现在顶部右侧角落.
TL; DR
从本质上讲,您的Detail
页面需要包含在NavigationPage
后退按钮中才能显示在iOS中.
这是我如何构建我的应用程序的示例.
App.cs
public static INavigation Navigation { get; set; }
public static Page GetMainPage(IContainer container)
{
return new MainPage();
}
Run Code Online (Sandbox Code Playgroud)
MainPage.cs
public class MainPage : MasterDetailPage
{
public MainPage()
{
Title = "Some Title";
var master = new MainMenu();
var detail = new NavigationPage(new FirstPage());
if (App.Navigation == null)
{
App.Navigation = detail.Navigation;
}
Master = master;
Detail = detail;
}
}
Run Code Online (Sandbox Code Playgroud)
既然你已经完成了这个,你的导航抽屉将按预期运行,你的ActionBar也会如此.
如果要在整个应用程序中导航,请使用静态定义的 Navigation
await App.Navigation.PushAsync(new FooPage());
// or
await App.Navigation.PopAsync();
Run Code Online (Sandbox Code Playgroud)
我终于找到了解决办法。该代码基本上需要两个小修正:
DetailPage
s 包裹在 a 中NavigationPage
,但不包含 the MasterDetailPage
(参见下面的 #1、#2 和 #3)。Icon
when MasterPage
”(参见下面的#4)。不要忘记将实际的 PNG(!) 添加到 iOS 资源。最小工作示例如下:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12032 次 |
最近记录: |