【问题标题】:Xamarin.Forms: How to hide the Navigation Bar Separator on iOS devices?Xamarin.Forms:如何在 iOS 设备上隐藏导航栏分隔符?
【发布时间】:2020-06-11 19:18:20
【问题描述】:

我已通过在app.xaml 中使用这些代码更改了导航栏的默认颜色,因为我无法使其在 iOS 设备上透明:

<Style TargetType="NavigationPage">
            <Setter Property="BarBackgroundColor" Value="#0a82b8" />
            <Setter Property="BarTextColor" Value="#ffffff" />
</Style>

现在,iOS 上有一个不必要的导航栏分隔符:

在微软的官方网站上,它说这些代码会有所帮助:

此平台特定隐藏分隔线和阴影 NavigationPage 上导航栏的底部。它被消耗在 XAML 通过设置 NavigationPage.HideNavigationBarSeparator 可绑定 属性为假:

<NavigationPage ...
                xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
                ios:NavigationPage.HideNavigationBarSeparator="true">

</NavigationPage>

或者,也可以使用 fluent API 从 C# 中使用它:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.iOSSpecific;

public class iOSTitleViewNavigationPageCS : Xamarin.Forms.NavigationPage
{
    public iOSTitleViewNavigationPageCS()
    {
        On<iOS>().SetHideNavigationBarSeparator(true);
    }
}

来源:Hiding the Navigation Bar Separator on a NavigationPage

问题是,当我想将ios:NavigationPage.HideNavigationBarSeparator="true" 属性粘贴到&lt;NavigationPage&gt;tag 中时,会出现以下错误:

未找到“HideNavigationBarSeparator”的属性、可绑定属性或事件,或者值和属性之间的类型不匹配。

我的完整代码是:

<?xml version="1.0" encoding="utf-8"?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:My.App" x:Class="My.App.MainPage">
    <MasterDetailPage.Master>
        <ContentPage Title="Menu" BackgroundColor="#0a82b8" Icon="menu.png">
            <StackLayout Orientation="Vertical">
                <ListView x:Name="navigationDrawerList" RowHeight="55" SeparatorVisibility="None" BackgroundColor="#ffffff" ItemSelected="OnMenuItemSelected">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>
                                <!-- Main design for our menu items -->
                                <StackLayout VerticalOptions="FillAndExpand" Orientation="Horizontal" Padding="20,10,0,10" Spacing="20">
                                    <Label Text="{Binding Title}" FontSize="Large" VerticalOptions="Start" HorizontalOptions="CenterAndExpand" TextColor="#28DDFF" FontAttributes="Bold" />
                                </StackLayout>
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackLayout>
        </ContentPage>
    </MasterDetailPage.Master>
    <MasterDetailPage.Detail>
        <NavigationPage xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
            ios:NavigationPage.HideNavigationBarSeparator="true">
        </NavigationPage>
    </MasterDetailPage.Detail>
</MasterDetailPage>

Here 是我为 MasterDetail 导航所遵循的教程。带有&lt;NavigationPage&gt;标签的文件被命名为MainPage.xaml

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    您可以使用自定义渲染器来隐藏该阴影:

    [assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNavigationPage))]
    namespace CustomNavigationPage.iOS
    {
        public class CustomNavigationPage : NavigationRenderer
        {
            protected override void OnElementChanged(VisualElementChangedEventArgs e)
            {
                base.OnElementChanged(e);
    
                NavigationBar.SetBackgroundImage(new UIKit.UIImage(), UIKit.UIBarMetrics.Default);
                NavigationBar.ShadowImage = new UIKit.UIImage();
            }
        }
    }
    

    【讨论】:

    • 像魅力一样工作!太感谢了! @BrunoCaceiro
    【解决方案2】:

    虽然您已经接受了答案,但这个答案更准确 - 您没有按照您从网站粘贴的说明操作,因为您省略了这一行:

    xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
    

    【讨论】:

      【解决方案3】:

      UINavigationBar.Appearance.ShadowImage = new UIImage(); 放在 AppDelegate.cs 文件中的 public override bool FinishedLaunching(UIApplication app, NSDictionary options) 方法中。 AppDelegate.cs 位于 Xamarin.Forms 的 iOS 项目中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-15
        • 1970-01-01
        • 1970-01-01
        • 2014-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多