c# - StatusBar 和 MasterDetailPage Xamarin.Forms Android 之间出现白条

标签 c# android xamarin xamarin.android xamarin.forms

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

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

enter image description here

enter image description here

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

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

我显示 map 的页面:

<?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);
            }
        }
    }
}

关于c# - StatusBar 和 MasterDetailPage Xamarin.Forms Android 之间出现白条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42226747/

相关文章:

Android:菜单和后退按钮停止工作

java - 第二个旋转器取决于第一个旋转器 (Xamarin VS)

c# - VS 2010 数据库 ORM 插件

c# - 更新目标触发器

android - Android 上的数据使用情况

android - 如何清除所有WebView存储的信息?

c# - 使用按钮 onclick 事件从文本框中复制文本

c# - 我的编译器会忽略无用的代码吗?

android - MvxCommand 将 CommandParameter 绑定(bind)到字段

Xamarin.Forms 在 ScrollView 问题中捏合手势