繁体   English   中英

StatusBar 和 MasterDetailPage Xamarin.Forms Android 之间出现一个白条

[英]A white bar appear between StatusBar and MasterDetailPage Xamarin.Forms Android

我正在尝试构建一个简单的地理定位应用程序,它应该在登录后指向用户在地图上的位置。 这部分工作正常,但我希望看到从状态栏和视图中删除的空白,但我不知道如何。

以下是错误屏幕的两个链接:

在此处输入图片说明

在此处输入图片说明

我已经尝试了此处提供的解决方案: https : //forums.xamarin.com/discussion/86568/unwanted-blank-space-above-navigation-bar-navigation-page但效果不佳:XAML 解决方案没有t 做任何事情,最后一个解决方案(检查构建版本)也使蓝条消失,这不是研究的效果。

这是我的一些代码,如果您需要更多,请告诉我:

我显示地图的页面:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.View.Detail"
             xmlns:i18n="clr-namespace:MyApp"
             Title=""
             BackgroundColor="{StaticResource MainBackgroundColor}"
             xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps">
  <StackLayout>
    <ActivityIndicator IsRunning="{Binding IsBusy, Mode=TwoWay}" IsVisible="{Binding IsBusy, Mode=TwoWay}" Color="Blue"/>
    <maps:Map VerticalOptions ="FillAndExpand" HorizontalOptions ="FillAndExpand"
            x:Name="MyMap"
            IsShowingUser="true"
            MapType="Street"
        />
  </StackLayout>
</ContentPage>

这是 MasterViewDetail

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.View.HomePage">

</MasterDetailPage>

感谢您的帮助!

编辑 :

这是我的项目的结构:

App(NavigationPage)
    MainPage (ContentPage)
        LoginPage (ContentPage)
            HomePage (MasterDetailPage)
                HomeDetail(ContentPage)
        RegisterPage (ContentPage)

问题是我并没有完全自由,我是一名实习生,必须遵循客户的命令......

它在 Xamarin 表单中以这种方式构建 - 它始终添加顶部填充。 已经为此提出了一个错误,但不知道何时修复。

我已经设法使用自定义渲染器来解决它,该渲染器会进行一些hacky反射:

[assembly: ExportRenderer(typeof(MasterDetailPage), typeof(NoSpaceMasterDetailPageRenderer))]

namespace Droid.Renderers
{
    public class NoSpaceMasterDetailPageRenderer : MasterDetailPageRenderer
    {
        /// <summary>
        /// When adding a view, tweak the top padding if necessary.
        /// According to:
        /// https://github.com/xamarin/Xamarin.Forms/blob/589adbd3ef145ec85f9fe64eda008251c1cdb745/Xamarin.Forms.Platform.Android/AppCompat/MasterDetailPageRenderer.cs
        /// The TopPadding is always set for the detail. This works fine when the master detail is shown normally, but
        /// if it is inside a navigation page (such as the inspection view) then you get extra unwanted padding.
        /// The 'fix' is to set the top padding to 0 for the detail, only of course the types and fields are hidden from us...
        /// </summary>
        /// <param name="child">Child.</param>
        public override void AddView(Android.Views.View child)
        {
            try
            {
                var isMasterField = child.GetType().GetField("_isMaster", BindingFlags.NonPublic | BindingFlags.Instance);
                if (isMasterField == null) return;

                var isMaster = isMasterField.GetValue(child);
                if ((bool)isMaster) return;

                var parentField = child.GetType().GetField("_parent", BindingFlags.NonPublic | BindingFlags.Instance);
                if (parentField == null) return;

                var parent = parentField.GetValue(child) as MasterDetailPage;
                if (parent == null || !(parent.Parent is NavigationPage)) return;

                var topPaddingProperty = child.GetType().GetProperty("TopPadding", BindingFlags.Public | BindingFlags.Instance);
                if (topPaddingProperty != null)
                    topPaddingProperty.SetValue(child, 0);
            }
            finally
            {
                base.AddView(child);
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM