如何更改标签栏项目的默认灰色?
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 添加其他问题的答案,检查一下以上是关于如何更改标签栏项目的默认灰色?的主要内容,如果未能解决你的问题,请参考以下文章