iOS 15 UITabBarItem 定制化

3

我有一个UITabBarController的子类和自定义项。自定义如下:

private func updateTabBar() {
    guard let items = tabBar.items,
        tabViewControllers.count == items.count else {
        return
    }

    for (item, vc) in zip(items, tabViewControllers) {
        // setting items title, image, selectedImage ...
        item.setTitleTextAttributes(Self.normalAttributes, for: .normal)
        item.badgeColor = .customColor
    }
}

这在iOS 14及之前版本中运行良好,但在iOS 15上不行。我找到了一些关于scrollEdgeAppearance的信息。这可以防止黑色背景。但设置有颜色的文本属性和徽章颜色会被忽略。 问题是如何在UITabBarItem上设置自定义文本颜色和徽章颜色?

你可能想展示你的 standardAppeararanc 和 scrollEdgeAppearance 的配置。顺便说一下,据我所知,在 iOS 15 中没有对 badgeColor 进行任何更改。 - kironet
个性化定制 - El Tomato
2
@kironet,在iOS 15中,badgeColor变成了system-red :( - Valentin Shamardin
1个回答

4

最终,我做到了。我正在寻找 stackedLayoutAppearance 及其属性 iconColorbadgeBackgroundColor。根据您的项目,您可能还需要 inlineLayoutAppearancecompactInlineLayoutAppearance

@available(iOS 13.0, *)
private static let tabBarAppearance: UITabBarAppearance = {
    let appearance = UITabBarAppearance()
    appearance.configureWithOpaqueBackground()
    appearance.backgroundColor = .customBackgroundColor
            
    appearance.stackedLayoutAppearance.normal.iconColor = .customTitleColorForNormalState
    appearance.stackedLayoutAppearance.normal.titleTextAttributes = normalAttributes
    appearance.stackedLayoutAppearance.selected.titleTextAttributes = normalAttributes
    appearance.stackedLayoutAppearance.normal.badgeBackgroundColor = .customBadgeColor
    return appearance
}()

我在遍历所有UITabBarItem时使用这个静态常量:

if #available(iOS 13.0, *) {
    item.standardAppearance = Self.tabBarAppearance
    if #available(iOS 15.0, *) {
        item.scrollEdgeAppearance = item.standardAppearance
    }
}

我的天啊,他们把一个一行代码的显而易见的东西搞得这么复杂。 - TylerJames

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接