UITabBarItems在子类化UITabBarController后没有出现

时间:2018-02-18 16:23:48

标签: swift uitabbarcontroller subclass

我一直在尝试在我的应用中为UITabBar添加渐变。尝试几次失败后,我按照this questionSimulator view的步骤进行操作。渐变现在有效,但UITabBarItems是不可见的(尽管它们都有效)。如何确保渐变和UIITabBarItems都可见?

class GradientTabBarController: UITabBarController {

let layerGradient = CAGradientLayer()

override func viewDidLoad() {
    super.viewDidLoad()
    print("custom tabbar loaded")
    layerGradient.colors = [UIColor(named: "tabBarGradient1")?.cgColor, UIColor(named: "tabBarGradient2")?.cgColor]
    layerGradient.startPoint = CGPoint(x:0.5, y: 0)
    layerGradient.endPoint = CGPoint(x: 0.5, y: 1)
    layerGradient.frame = tabBar.bounds
    self.tabBar.layer.addSublayer(layerGradient)
 } 
}

模拟器中的样子: IB view

缺少的图标(来自Interface Builder的视图) {{3}}

1 个答案:

答案 0 :(得分:2)

不支持您正在做的事情。但是,如果您要执行此操作,则需要将渐变图层放在标签栏项目后面。您将它放在标签栏项目的中:

 self.tabBar.layer.addSublayer(layerGradient)

你需要说更多的话:

 self.tabBar.layer.insertSublayer(layerGradient, at:0)

我们的想法是将层放在标签栏项目后面。但究竟要使用什么号码,我不确定;你必须进行实验,我不能保证任何此类行动的稳健性。它可能根本不起作用,因为标签栏项目不是视图。

为标签栏设置自定义背景的正确方法是使UIView显示渐变,并将其设置为标签栏backgroundImage。为什么不用正确的支持方式而不是你的hacky不支持的方式?你应该使用框架,而不是战斗框架。