
我想删除汉堡菜单图标,同时保留导航栏。我想要将内容添加到NavigationPage.TitleView属性中,并且希望它占据整个页面的宽度。在我附加的图片中,黄色背景颜色显示了TitleView当前占用的宽度。
我知道在表单中你可以控制后退按钮的可见性,有没有一种方法也可以控制汉堡菜单图标?根据我所读到的,这很可能需要一个自定义的渲染器,我已经尝试过了,但没有成功。我需要支持iOS和安卓。
发布于 2020-08-05 15:16:48
事实证明,在目前,这是不可能的。您可以隐藏汉堡菜单,但它仍然占用空间(参见Leon Lu的答案)。
我的解决方案是创建一个自定义导航栏,这样我就有了完全的控制权。如果要执行此操作,请先删除导航栏:
NavigationPage.SetHasNavigationBar(this, false);
然后使用常规的xaml代码添加您的自定义导航,就像处理任何其他组件一样。
要记住的一件事是,在ios中,你的导航可以显示缺口的位置,要解决这个问题,你需要使用以下代码:
On<iOS>().SetUseSafeArea(true);
发布于 2020-07-31 15:17:30
在android中,您可以使用以下自定义渲染器代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Support.V7.Graphics.Drawable;
using Android.Views;
using Android.Widget;
using MesterDetailspage.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android.AppCompat;
[assembly: ExportRenderer(typeof(MasterDetailPage), typeof(MyMasterDetailRenderer))]
namespace MesterDetailspage.Droid
{
public class MyMasterDetailRenderer : MasterDetailPageRenderer
{
public MyMasterDetailRenderer(Context context) : base(context)
{
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
if (toolbar != null)
{
for (var i = 0; i < toolbar.ChildCount; i++)
{
var imageButton = toolbar.GetChildAt(i) as Android.Widget.ImageButton;
var drawerArrow = imageButton?.Drawable as DrawerArrowDrawable;
if (drawerArrow == null)
continue;
bool displayBack = false;
var app = Xamarin.Forms.Application.Current;
var detailPage = (app.MainPage as MasterDetailPage).Detail;
var navPageLevel = detailPage.Navigation.NavigationStack.Count;
if (navPageLevel > 1)
displayBack = true;
if (!displayBack)
ChangeIcon(imageButton, Resource.Drawable.test1);
if (displayBack) ;
//ChangeIcon(imageButton, Resource.Drawable.back1);
}
}
}
private void ChangeIcon(Android.Widget.ImageButton imageButton, int id)
{
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop)
imageButton.SetImageDrawable(Context.GetDrawable(id));
imageButton.SetImageResource(id);
}
}
}我设置了一个透明的背景图像。

这是运行截图。

对于iOS,只需在xamarin forms xaml中设置MasterDetailPage标记中的IconImageSource="test1.png"。
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
IconImageSource="test1.png"
xmlns:views="clr-namespace:MesterDetailspage.Views"
x:Class="MesterDetailspage.Views.MainPage">https://stackoverflow.com/questions/63185346
复制相似问题