如何将 UITabBarItem.BadgeColor 设置为颜色(来自资源文件)

问题描述 投票:0回答:1

我正在尝试从资源文件中设置 UITabBarItem 的徽章颜色,但会选择除 默认红色以外的任何颜色。

我为 iOS 平台创建了一个自定义

ShellTabBarAppearanceTracker
,并尝试通过事件处理程序更新徽章颜色。

class BadgeShellTabbarAppearanceTracker : ShellTabBarAppearanceTracker
{
    private UITabBarItem? notificationTabbarItem;
    public override void UpdateLayout(UITabBarController controller)
    {
        // Set event listener to UpdateBadge here when count changes
    }

    private void UpdateBadge(int count)
    {
        if (notificationTabbarItem is not null)
        {
                Color cyan;
                if (App.Current.Resources.TryGetValue("CyanAccent", out var colorvalue))
                {
                    cyan = (Color)colorvalue;
                    notificationTabbarItem.BadgeColor = cyan.ToPlatform();
                }
            }
        }
    }

每次计数变化都会达到所有

UpdateBadge
代码。在单步执行和检查变量时,它甚至似乎正确设置了颜色。

替换对资源目录的查找,并将颜色设置为标准 MAUI 颜色也不会改变它。

notificationTabbarItem.BadgeColor = Colors.Blue.ToPlatform();

我尝试在主线程上调用它,没有任何改变:

MainThread.BeginInvokeOnMainThread(() =>
{
    item.BadgeColor = Colors.Blue.ToPlatform();
});

也可以直接通过

TabBar.StandardAppearance
:

var appearance = controller.TabBar.StandardAppearance;
appearance.StackedLayoutAppearance.Normal.BadgeBackgroundColor = Colors.Pink.ToPlatform();
appearance.InlineLayoutAppearance.Normal.BadgeBackgroundColor = Colors.Pink.ToPlatform();
appearance.CompactInlineLayoutAppearance.Normal.BadgeBackgroundColor = Colors.Pink.ToPlatform();

与原始代码片段非常相似的代码非常适合 Android。

我应该在哪里/如何设置徽章的颜色?

提前致谢。

maui uitabbaritem
1个回答
0
投票

MAUI 中没有直接的 API 可以修改徽章颜色。如果需要,您可以在 GitHub 上提出功能请求。

是的,有一个解决方法,但有点棘手。那就是使用 Maui Handler。

我建议您参考如何在 iOS 上的 .NET MAUI 中增加 TabBar 菜单项的字体大小。我们针对此案例的解决方法也使用此流程。

唯一的不同是TabbedViewExtensions.cs。 (我上面发布的答案链接添加了一些代码来更改

UIStringAttributes
。不要忘记删除它们)。添加以下行来更改徽章颜色,

    internal static void UpdateiOS15TabBarAppearance(
        this UITabBar tabBar,
        ref UITabBarAppearance _tabBarAppearance,
        UIColor? defaultBarColor,
        UIColor? defaultBarTextColor,
        Color? selectedTabColor,
        Color? unselectedTabColor,
        Color? barBackgroundColor,
        Color? selectedBarTextColor,
        Color? unSelectedBarTextColor)
    {
        ...
        //Add the following line
        if (App.Current.Resources.TryGetValue("CyanAccent", out var colorvalue))
        {
            var cyan = (Color)colorvalue;
   _tabBarAppearance.StackedLayoutAppearance.Normal.BadgeBackgroundColor = cyan.ToPlatform();

        }

       ...

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.