【问题标题】: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))

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

【问题讨论】:

    标签: xcode swift uitabbarcontroller


    【解决方案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 添加其他问题的答案,检查一下
    猜你喜欢
    • 1970-01-01
    • 2012-01-15
    • 2018-07-04
    • 2013-11-17
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多