无法将颜色更改为 tabBar?

Posted

技术标签:

【中文标题】无法将颜色更改为 tabBar?【英文标题】:Unable to change the color to tabBar? 【发布时间】:2020-08-31 19:05:32 【问题描述】:

我在 parantTabBarController 类中有以下方法: 可以看到使 tabBar 完全透明的各种尝试。唯一有效的是顶部的那个。

       override func viewDidLoad() 
        super.viewDidLoad()

        UITabBar.appearance().barTintColor = UIColor.clear
        UITabBar.appearance().backgroundImage = UIImage()
//        UITabBar.appearance().barTintColor = UIColor.blue

//        changeTabBarOpacity()
//        self.tabBar.unselectedItemTintColor = UIColor(red: 17.0/255.0, green: 70.0/255.0, blue: 95.0/255.0, alpha: 0.4)
//        self.tabBar.backgroundColor = UIColor(red: 17.0/255.0, green: 70.0/255.0, blue: 95.0/255.0, alpha: 0.0)

//        self.tabBar.backgroundColor = UIColor.clear
//        self.tabBar.backgroundImage = UIImage()
//        self.tabBar.shadowImage = UIImage()  // removes the border

    

但是,通过这种方法,我无法在其他视图控制器中更改同一 tabBar 的背景颜色。我尝试用白色图像替换图像,更改背景颜色:UITabBar.appearance().backgroundColor = UIColor.white 但没有任何效果。

我怎样才能在一个页面上有一个半透明的 tabBar 而在所有其他页面上有一个白色的?

【问题讨论】:

将外观代码添加到 AppDelegate didFinishLaunching。 viewDidLoad 特定于一个视图控制器,因此更改不会应用于其他视图。 @AkhileshSharma "viewDidLoad 特定于一个视图控制器,因此更改不会应用于其他视图" 是的,我知道,但是尝试更改当前 VC 的背景颜色甚至在这些中都不起作用其他风投 我无法在这里得到问题。您是要更改 tabBar 的背景颜色还是要更改 VC 的背景颜色?你能在这里多解释一下你的问题吗 @AkhileshSharma 正在尝试更改标签栏的背景颜色。但也将不透明度更改为 0.0 【参考方案1】:

@isa123 在 appdelegate didFinishLaunchingWithOptions 方法中试试这个代码

  UITabBar.appearance().tintColor = .white
  UITabBar.appearance().barTintColor = UIColor(named: "PrimaryDark")
  UITabBar.appearance().isOpaque = false
  UITabBar.appearance().backgroundImage = UIImage.init(color: UIColor(named: "PrimaryDark")!, size: CGSize(width: 1, height: 1))

【讨论】:

【参考方案2】:

斯威夫特 5:

好的,我找到了解决方案,主要是使用UITabBarisTranslucent 属性。

如果您将 isTranslucent : true 发送到具有不透明自定义的标签栏 背景图像标签栏将应用系统不透明度小于 1.0 的图像。

如果您想设置清晰的颜色,那么您只需将isTranslucent 设置为 true。如果您想应用其他颜色,请将isTranslucent 设置为 false。

在你的 TabBarViewController 中使用下面的 TabBarViewController 类


    class TabBarViewController: UITabBarController, UITabBarControllerDelegate 
    
        override func viewDidLoad() 
            super.viewDidLoad()
            self.delegate = self
            
            self.tabBar.isTranslucent = true
            UITabBar.appearance().backgroundImage = UIImage()
            
            //This is for removing top line from the tabbar.
            UITabBar.appearance().layer.borderWidth = 0.0
            UITabBar.appearance().clipsToBounds = true
        
    
       // This method will get called when you tap on any tab
        func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool 
            
            if viewController == tabBarController.viewControllers?[0]  //<----- This is first viewController
                
                //If you set isTranslucent to true then no need to set barTintColor. it will make your tabBar transparent
                self.tabBar.isTranslucent = true
                
             else if viewController == tabBarController.viewControllers?[1]  //<----- This is second viewController
                
                self.tabBar.isTranslucent = false
                
               // the tab bar will provide an opaque background black for UIBarStyleBlack or white for UIBarStyleDefault if barTintColor is nil.
                self.tabBar.barTintColor = .white
                
                // OR
                
              //  self.tabBar.barTintColor = nil
                
             else 
                self.tabBar.isTranslucent = false
                self.tabBar.barTintColor = .red
            
            return true
        
    

输出:-

希望对你有帮助

【讨论】:

【参考方案3】:

我使用此代码在 UITabBarController 的自定义子类中配置选项卡栏。它支持 ios 15 和 XCode 13 更新。

let backgroundColor = UIColor.red
let selectedItemTextColor = UIColor.black
let unselectedItemTextColor = UIColor.white

if #available(iOS 15, *) 
    let tabBarAppearance = UITabBarAppearance()
    tabBarAppearance.backgroundColor = backgroundColor
    tabBarAppearance.stackedLayoutAppearance.selected.titleTextAttributes = [.foregroundColor: selectedItemTextColor]
    tabBarAppearance.stackedLayoutAppearance.normal.titleTextAttributes = [.foregroundColor: unselectedItemTextColor]
    tabBar.standardAppearance = tabBarAppearance
    tabBar.scrollEdgeAppearance = tabBarAppearance
 else 
    UITabBarItem.appearance().setTitleTextAttributes([.foregroundColor: selectedItemTextColor], for: .selected)
    UITabBarItem.appearance().setTitleTextAttributes([.foregroundColor: unselectedItemTextColor], for: .normal)
    tabBar.barTintColor = backgroundColor

【讨论】:

以上是关于无法将颜色更改为 tabBar?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中更改 TabBar 的颜色?图像作为导航栏中的背景?

无法将状态栏颜色更改为半透明黑色 [重复]

无法将 SVG 的颜色更改为白色

TabBar /“更多视图控制器” - 可能有黑色以外颜色的图标?

将分组条形图中每个条形的颜色更改为自定义颜色

使用 xcode 5 界面生成器设置标签栏色调(背景)颜色