Xamarin 如何删除iOS上显示的选项卡栏上方的行

Xamarin 如何删除iOS上显示的选项卡栏上方的行,xamarin,xamarin.forms,Xamarin,Xamarin.forms,以下是我试图删除的内容。我以为它在早期的iOS中已经被删除了,但现在在13.3中我想它又回来了: 以下是我以前使用的渲染器代码: protected override IShellItemRenderer CreateShellItemRenderer(ShellItem item) { var renderer = base.CreateShellItemRenderer(item); (renderer as ShellItemRendere

以下是我试图删除的内容。我以为它在早期的iOS中已经被删除了,但现在在13.3中我想它又回来了:

以下是我以前使用的渲染器代码:

    protected override IShellItemRenderer CreateShellItemRenderer(ShellItem item)
    {
        var renderer = base.CreateShellItemRenderer(item);
        (renderer as ShellItemRenderer).TabBar.Translucent = false;
        (renderer as ShellItemRenderer).TabBar.ShadowImage = new UIImage(); // <<<<<<<
        (renderer as ShellItemRenderer).TabBar.BackgroundImage = new UIImage();
        UITabBar myTabBar = (renderer as ShellItemRenderer).TabBar;

        foreach (var barItem in myTabBar.Items)
        {
            barItem.ImageInsets = new UIEdgeInsets(5, 0, 0, 0);
        }
        return renderer;
    }
受保护的覆盖IShellItemRenderer CreateShellItemRenderer(ShellItem项目)
{
var renderer=base.CreateShellItemRenderer(项);
(渲染器作为ShellItemRenderer)。TabBar.Translucent=false;
(作为ShellItemRenderer的渲染器)。TabBar.ShadowImage=new UIImage();//这是


...

重写的方法
CreateShellItemRenderer
现在无法获取
Tabbar
,它将返回
null
。因此代码无法工作

您可以覆盖CreateTabarAppearanceTracker以在iOS 13中获取Tabbar。如下所示:

[assembly: ExportRenderer(typeof(AppShellTab.AppShell), typeof(AppShellTab.iOS.MyShellRenderer))]
namespace AppShellTab.iOS
{
    public class MyShellRenderer : ShellRenderer
    {
        protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
        {
            return new MyOtherTabBarAppearanceTracker();
        }

        public class MyOtherTabBarAppearanceTracker : ShellTabBarAppearanceTracker, IShellTabBarAppearanceTracker
        {
            void IShellTabBarAppearanceTracker.SetAppearance(UITabBarController controller, ShellAppearance appearance)
            {
                base.SetAppearance(controller, appearance);
                var tabBar = controller.TabBar;
                tabBar.BackgroundImage = new UIImage();
                tabBar.ClipsToBounds = true;
                //tabBar.Translucent = false;
            }
        }
    }
}
其效果是:


抱歉,这不是我要删除的内容。您好,Junior,您提到“重写的方法CreateShellItemRenderer现在无法获取Tabbar”。您能帮我确认一下吗,因为我能够获取Tabbar,并且我使用的是最新的代码。可能是4.5版无法获取Tabbar。我尝试添加了“tabBar.clipstobunds=true;"正如你所建议的,效果很好。我想确认一下我的问题。非常感谢much@Alan2好的,上面的代码在16.4.5版本之前测试过,它可以工作。我会用最新的16.4.5版本检查它。好的是它工作得很好,如果有任何问题,那么我也会在我的代码中注释掉你的其他建议未来。非常感谢您的帮助。@Alan2好的,很高兴听到这个消息!如果其他问题也可以稍后分享。
[assembly: ExportRenderer(typeof(AppShellTab.AppShell), typeof(AppShellTab.iOS.MyShellRenderer))]
namespace AppShellTab.iOS
{
    public class MyShellRenderer : ShellRenderer
    {
        protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
        {
            return new MyOtherTabBarAppearanceTracker();
        }

        public class MyOtherTabBarAppearanceTracker : ShellTabBarAppearanceTracker, IShellTabBarAppearanceTracker
        {
            void IShellTabBarAppearanceTracker.SetAppearance(UITabBarController controller, ShellAppearance appearance)
            {
                base.SetAppearance(controller, appearance);
                var tabBar = controller.TabBar;
                tabBar.BackgroundImage = new UIImage();
                tabBar.ClipsToBounds = true;
                //tabBar.Translucent = false;
            }
        }
    }
}