首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin forms -移除汉堡菜单图标,但保留导航栏

Xamarin forms -移除汉堡菜单图标,但保留导航栏
EN

Stack Overflow用户
提问于 2020-07-31 11:27:12
回答 2查看 743关注 0票数 0

我想删除汉堡菜单图标,同时保留导航栏。我想要将内容添加到NavigationPage.TitleView属性中,并且希望它占据整个页面的宽度。在我附加的图片中,黄色背景颜色显示了TitleView当前占用的宽度。

我知道在表单中你可以控制后退按钮的可见性,有没有一种方法也可以控制汉堡菜单图标?根据我所读到的,这很可能需要一个自定义的渲染器,我已经尝试过了,但没有成功。我需要支持iOS和安卓。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-05 15:16:48

事实证明,在目前,这是不可能的。您可以隐藏汉堡菜单,但它仍然占用空间(参见Leon Lu的答案)。

我的解决方案是创建一个自定义导航栏,这样我就有了完全的控制权。如果要执行此操作,请先删除导航栏:

NavigationPage.SetHasNavigationBar(this, false);

然后使用常规的xaml代码添加您的自定义导航,就像处理任何其他组件一样。

要记住的一件事是,在ios中,你的导航可以显示缺口的位置,要解决这个问题,你需要使用以下代码:

On<iOS>().SetUseSafeArea(true);

票数 0
EN

Stack Overflow用户

发布于 2020-07-31 15:17:30

在android中,您可以使用以下自定义渲染器代码。

代码语言:javascript
复制
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"

代码语言:javascript
复制
<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">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63185346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档