如何在tabBarController中更改所选项目的背景颜色

时间:2018-01-23 00:54:35

标签: ios iphone swift tabbarcontroller

我试图改变背景,唯一改变的是图像和标签颜色,我希望背景本身变成不同的颜色。

示例:

imgExampleTabBarController

有人知道如何进行此更改吗?

3 个答案:

答案 0 :(得分:0)

你可能会尝试类似的东西:

UITabBar.appearance().backgroundColor = .white
UITabBar.appearance().tintColor = .green // or whatever your green is

这会使应用程序中的所有标签栏在实例化时默认为这些颜色。

注意:我没有测试过这个。

答案 1 :(得分:0)

为什么每个tabBarItem都没有两个图像,其中一个图像用于默认状态,另一个图像用于选择状态。在您的情况下,所有状态均为白色,默认为绿色。

您可以通过UIBarItem UIBarItem的商店属性或构造函数/初始化程序var selectedImage: UIImage? { get set }init(title: String?, image: UIImage?, selectedImage: UIImage?)设置这些图片。

答案 2 :(得分:0)

UITabBarController中添加以下代码:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

    let removeSelectedBackground = {
        tabBar.subviews.filter({ $0.layer.name == "TabBackgroundView" }).first?.removeFromSuperview()
    }

    let addSelectedBackground = { (bgColour: UIColor) in
        let tabIndex = CGFloat(tabBar.items!.index(of: item)!)
        let tabWidth = tabBar.bounds.width / CGFloat(tabBar.items!.count)
        let bgView = UIView(frame: CGRect(x: tabWidth * tabIndex, y: 0, width: tabWidth, height: tabBar.bounds.height))
        bgView.backgroundColor = bgColour
        bgView.layer.name = "TabBackgroundView"
        tabBar.insertSubview(bgView, at: 0)
    }

    removeSelectedBackground()
    addSelectedBackground(UIColor.green)
}

它会在所选标签的任何位置插入green视图。您也可以使其尊重safeAreaInsets ..现在,无论何时选择标签,它都会从{{{{{{{ 1}}并在正确的位置添加一个新的。如果您喜欢或者从旧位置动画到新位置,您可以每次重复使用相同的视图......无论您感觉如何。您可以按标签而不是图层名称来识别视图,但这只是个人偏好。