【问题标题】:How to add a space between the Tabbar line and the icons in iOS using Xamarin Forms Shell?如何使用 Xamarin Forms Shell 在 iOS 中的 Tabbar 行和图标之间添加空格?
【发布时间】:2020-02-23 23:15:53
【问题描述】:

我使用了 ShellRenderer,但无法让代码正常工作以在 Tabbar 行和图标之间添加额外的空间。这是一张图片:

我需要增加灰线和所有图标顶部之间的空间。 这是我尝试过的代码。


[assembly: ExportRenderer(typeof(Shell), typeof(CustomShellRenderer))]
namespace MyProject.iOS.CustomRenderers
{
    public class CustomShellRenderer : ShellRenderer
    {
        protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
        {
            var renderer = base.CreateShellSectionRenderer(shellSection);
            if (renderer != null)
            {
                var a = (renderer as ShellSectionRenderer);
                (renderer as ShellSectionRenderer).NavigationBar.Translucent = false;
            }
            return renderer;
        }

        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();
            CGRect frame = (renderer as ShellItemRenderer).TabBar.Frame;
            UIView view = new UIView();
            view.BackgroundColor = UIColor.Yellow;
            view.Frame = new CGRect(frame.X, frame.Y, frame.Width, 10);
            (renderer as ShellItemRenderer).TabBar.AddSubview(view);
            return renderer;
        }
    }

【问题讨论】:

    标签: c# ios xamarin xamarin.forms custom-renderer


    【解决方案1】:

    您可以添加一点ImageInsets 的 barItem 以在灰线和所有图标的顶部之间留出一个空间。您不能添加额外的视图,因为空间是固定的。

    public class MyShellRenderer : ShellRenderer
    {
        protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
        {
            var renderer = base.CreateShellSectionRenderer(shellSection);
            if (renderer != null)
            {
                (renderer as ShellSectionRenderer).NavigationBar.SetBackgroundImage(UIImage.FromFile("monkey.png"), UIBarMetrics.Default);
            }
            return renderer;
        }
    
        protected override IShellTabBarAppearanceTracker CreateTabBarAppearanceTracker()
        {
            return new CustomTabbarAppearance();
        }
    }
    
    public class CustomTabbarAppearance : IShellTabBarAppearanceTracker
    {
        public void Dispose()
        {
    
        }
    
        public void ResetAppearance(UITabBarController controller)
        {
    
        }
    
        public void UpdateLayout(UITabBarController controller)
        {
    
            UITabBar myTabBar = controller.TabBar;
    
            foreach (var barItem in myTabBar.Items)
            {
                barItem.ImageInsets = new UIEdgeInsets(8, 0, 0, 0);
                //barItem.TitlePositionAdjustment = new UIOffset(10, 0);
            }
        }
    }
    

    您可以查看我的示例here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2019-11-06
      • 2019-11-08
      • 2021-04-23
      • 2020-09-05
      • 2020-04-28
      • 2023-03-25
      • 2019-03-02
      相关资源
      最近更新 更多