Как добавить пробел между строкой табуляции и значками в iOS с помощью Xamarin Forms Shell? - PullRequest
1 голос
/ 23 января 2020

Я использовал ShellRenderer, но не могу заставить работать код, чтобы добавить дополнительный пробел между строкой Tabbar и значками. Вот изображение: enter image description here

Мне нужно увеличить расстояние между серой линией и верхней частью всех значков. Вот код, который я пробовал.


[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;
        }
    }

1 Ответ

1 голос
/ 24 января 2020

Вы можете добавить немного 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);
        }
    }
}

Вы можете проверить мой образец здесь .

...