swift - UITabBarItems 在子类化 UITabBarController 后不显示

标签 swift uitabbarcontroller subclass

我一直在尝试向我的应用程序中的 UITabBar 添加渐变。几次尝试失败后,我按照 this question 中的步骤操作和。渐变现在有效,但 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)
 } 
}

它在模拟器中的样子: Simulator view

缺少的图标(从 Interface Builder 查看) IB view

最佳答案

不支持您正在做的事情。但是,如果您打算这样做,则需要将渐变层放在 选项卡栏项目之后。您将其放在标签栏项目的前面:

 self.tabBar.layer.addSublayer(layerGradient)

你需要说的更像是:

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

想法是将图层放在 标签栏项目之后。但是我不确定到底要使用什么数字;你必须进行试验,我不保证任何此类行动的稳健性。它甚至可能根本不起作用,因为标签栏项目不是 View 。

为标签栏制作自定义背景的正确方法是制作一个显示渐变的 UIView,并将其设置为标签栏的 backgroundImage。 .你为什么不以正确的支持方式而不是你的 hacky 不受支持的方式来做到这一点?您应该使用框架,而不是对抗框架。

关于swift - UITabBarItems 在子类化 UITabBarController 后不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48853864/

相关文章:

ios - 照片浏览器的方向问题

iphone - 从另一个 View 中选择 TableView 的行

objective-c - 以编程方式将自定义对象数组传递给 NSMatrix 中的 NSCell

swift - 展开变量哪个不是可选的?

ios - Swift UIView 动画 block 增量错误

ios - 执行 UIAlertController 时获取 nil

iphone - 在项目中实现 UItabbarController + UInavigationBar

java继承处理字段

java - 子类和继承的问题

ios - 淡入按钮,这样它就不会再次自动淡出