如何更改标签栏项目的默认灰色?

Posted

技术标签:

【中文标题】如何更改标签栏项目的默认灰色?【英文标题】:How to change default grey color of tab bar items? 【发布时间】:2015-11-07 19:03:02 【问题描述】:

我尝试更改 Tab Bar 项目的默认灰色,但 Xcode 发现错误。我使用了一些代码,该代码是:

import UIKit

extension UIImage 
func makeImageWithColorAndSize(color: UIColor, size: CGSize) -> UIImage 
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    color.setFill()
    UIRectFill(CGRectMake(0, 0, size.width, size.height))
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
  


class SecondViewController: UIViewController 

let tabBar = UITabBar()

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.



    UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar.frame.width/CGFloat(tabBar.items!.count), tabBar.frame.height))


所以我把它放在SecondViewController 中作为测试,当我在 Xcode Simulator 上运行应用程序时它崩溃并且它在日志中显示错误(控制台)致命错误:在展开可选值时意外发现 nil强>

我认为问题出在这里:

    UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar.frame.width/CGFloat(tabBar.items!.count), tabBar.frame.height))

因为当我删除这部分代码时,不会发生错误。 有人可以帮我吗?

【问题讨论】:

【参考方案1】:

您的代码中的问题是您创建UITabBar 对象,如let tabBar = UITabBar(),并且该对象与位于表单上的选项卡无关。您的 tabBar 是一个新的空对象,其中不包含任何 UITabBarItem 对象,当您调用它时:

UITabBar.appearance().selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar.frame.width/CGFloat(tabBar.items!.count), tabBar.frame.height))

当您尝试执行此操作时会发生错误:tabBar.items!.count。您正在尝试解开可选的 items 数组 [UITabBarItem]? 并且它 nil 因为 tabBar 是空对象并且没有项目。

要解决此问题,您需要从当前的 UITabBarController 获取对 UITabBar 的引用,例如:

class SecondViewController: UIViewController 

    var tabBar: UITabBar?

    override func viewDidLoad() 
        super.viewDidLoad()

        tabBar = self.tabBarController!.tabBar
        tabBar!.selectionIndicatorImage = UIImage().makeImageWithColorAndSize(UIColor.blueColor(), size: CGSizeMake(tabBar!.frame.width/CGFloat(tabBar!.items!.count), tabBar!.frame.height))
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

【讨论】:

@EminEmini 添加其他问题的答案,检查一下

以上是关于如何更改标签栏项目的默认灰色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改标签栏中未选中项目的颜色?

如何更改 iOS 7 中未选择的标签栏项目的颜色?

如何以编程方式更改标签栏项目使用的默认图标?

如何快速更改标签栏的色调?

更改非活动标签栏图标的颜色

iOS:为啥自定义标签栏项目仅显示为灰色轮廓?