无法将颜色更改为 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:
好的,我找到了解决方案,主要是使用UITabBar
的isTranslucent
属性。
如果您想设置清晰的颜色,那么您只需将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 的颜色?图像作为导航栏中的背景?