1

在此处输入图像描述TvOS 13. 我有一个带有标签的 UITabBarController。并且可以自定义几乎所有东西,除了这个明显的东西:焦点标签的背景。它总是白色的。 指南告诉

指定选定和未选定项目的色调

我试过了:

view.backgroundColor = .purple
tabBar.tintColor = .yellow
tabBar.barTintColor = .red
tabBar.unselectedItemTintColor = .brown
tabBar.backgroundColor = .green
tabBar.backgroundImage = UIColor.blue.toImage()
tabBar.shadowImage = UIColor.orange.toImage()
tabBar.selectionIndicatorImage = UIColor.burgundy.toImage()

没有任何帮助。

4

3 回答 3

5

在玩了一下UITabBar和UITabBarController的各种属性之后,我终于弄明白了。

更改焦点项目背景颜色的属性是selectionIndicatorTintColorUITabBarAppearance文档

由于它在 tvOS >= 13.0 上可用,因此您必须像这样包装分配:

if #available(tvOS 13.0, *) {
    tabBar.standardAppearance.selectionIndicatorTintColor = .white
}
于 2019-10-22T08:24:23.397 回答
2

对于@davidv 和其他人,这是我的解决方案:

extension UIView {
    func subviews<T:UIView>(ofType type: T.Type) -> [T] {
        var result = self.subviews.compactMap { $0 as? T }
        for sub in self.subviews {
            result.append(contentsOf: sub.subviews(ofType: type))
        }
        return result
    }
}

extension UIViewController {
    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        // перекраска кнопки
        let allSubviews = tabBar.subviews(ofType: UIView.self)
        let whiteSubviews = allSubviews.filter { $0.backgroundColor == .white }
        for s in whiteSubviews {
            s.backgroundColor = .gold
        }
    }
}

更新:

对于着色文本:

item.setTitleTextAttributes([NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: colorSelected], for: [.focused])
item.setTitleTextAttributes([NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: colorSelected], for: [.highlighted])
item.setTitleTextAttributes([NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: colorUnselected], for: [.normal])

对于着色背景:

tabBar.standardAppearance.selectionIndicatorTintColor = .gold
于 2019-10-22T07:01:03.050 回答
0

我通过UITabBar扩展来实现这一点。显示在焦点上的视图包含一个UIMotionEffect,因此我们检查它以找到它。

@available(tvOS 13.0, *)
extension UITabBar {

    var focusBackgroundView: UIView? {
        let allSubviews: [UIView] = subviews.flatMap { [$0] + $0.subviews as [UIView] }
        return allSubviews.first{ !$0.motionEffects.isEmpty }
    }

}

用法:

myTabBar.focusBackgroundView.backgroundColor = .red
于 2019-11-06T15:09:26.700 回答