Xamarin Forms 4.0 Shell Flyout菜单顶部背景颜色设置

时间:2019-06-28 09:04:55

标签: shell xamarin.forms flyout

我正在使用Xamarin Forms 4.0 Shell创建一个应用程序。但是我无法将弹出菜单的顶部自定义为黑色。我知道将弹出背景色设置为黑色将解决此问题,但是我需要将弹出部分的下部保持为其他颜色。还有其他方法可以做到这一点吗?请参阅下图以供参考。

iOS iPhone XR Simulator Screenshot

谢谢!


我尝试将UIApplication.SharedApplication.StatusBarStyle从Light更改为Default,以下屏幕截图显示时钟以黑色字体显示(蓝色箭头),但Wifi电池图标消失(红色箭头)

iOS iPhone XR Simulator Screenshot


添加了sample on Github进行审核。

3 个答案:

答案 0 :(得分:1)

这有点晚了,但是我自己碰到了这个问题。实际上,这似乎是一个错误。我发布了一些我在GitHub问题上发现的内容,希望Xamarin团队可以在此进行修复。

同时,我找到了一种解决方法,可以使所有平台之间的弹出标题相同,而不必进行任何其他怪异的改动。

作为全面参考-我发现弹出菜单标题上方的白条实际上是菜单下面的弹出内容的一部分。如果更改弹出菜单的背景颜色,您将自己看到。似乎允许弹出菜单进入iOS安全区域,但标题不能。我所做的工作是在弹出标题模板的布局中使用负边距,然后设置一些填充以抵消onplatform块中的安全区域。因为这样可以有效地缩小内容区域,所以我也按平台设置了高度。最终看起来像下面的代码:

    <Shell.FlyoutHeaderTemplate>
        <DataTemplate>
            <StackLayout BackgroundColor="{DynamicResource Primary}">
                <StackLayout.Margin>
                    <OnPlatform x:TypeArguments="Thickness">
                        <On Platform="iOS" Value="0,-1,0,0" />
                    </OnPlatform>
                </StackLayout.Margin>
                <StackLayout.Padding>
                    <OnPlatform x:TypeArguments="Thickness">
                        <On Platform="iOS" Value="0,20,0,0" />
                    </OnPlatform>
                </StackLayout.Padding>
                <StackLayout.HeightRequest>
                    <OnPlatform x:TypeArguments="x:Double">
                        <On Platform="iOS" Value="220" />
                        <On Platform="Android" Value="200" />
                    </OnPlatform>
                </StackLayout.HeightRequest>

                <ContentHere>...</ContentHere>

            </StackLayout>
        </DataTemplate>
    </Shell.FlyoutHeaderTemplate>

我简直不敢相信我只在此处和该GitHub链接中看到过此问题...但是希望这可以帮助其他人解决这个问题,直到Xamarin团队的修复程序生效!

答案 1 :(得分:0)

您是否尝试创建了Flyout Header控件?使用此控件,您可以自定义弹出窗口的上部。 Shell Documentation

让我知道这是否有帮助。

答案 2 :(得分:0)

图片中弹出菜单的顶部是状态栏

您似乎在项目中设置了UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.LightContent;,文本颜色为white,因此在white背景视图下看不到任何文本。

要更改状态栏的背景颜色,可以设置UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.Default;以使状态栏可见或自定义状态栏的背景颜色。