首页 文章

改变导航栏的颜色

提问于
浏览
0

我想改变导航栏的背景颜色,但遇到了麻烦:

let colourRGBs: [[CGFloat]] = [[247, 247, 247], [38, 123, 238], [93, 204, 3]]
let colourTitles: [String] = ["Default", "Blue", "Green"]

override func viewDidLoad() {
    super.viewDidLoad()

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem
}

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

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return colourTitles.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PickNavBarColourCell", for: indexPath) as! PickNavBarColourCell
    let RGB = colourRGBs[indexPath.row]
    cell.backgroundColor = UIColor(red: RGB[0]/255.0, green: RGB[1]/255.0, blue: RGB[2]/255.0, alpha: 1.0)
    cell.configureCell(text: colourTitles[indexPath.row])
    if indexPath.row == passOnNavBarColour.colour {
        cell.accessoryType = UITableViewCellAccessoryType.checkmark
    }
    else {
        cell.accessoryType = UITableViewCellAccessoryType.none
    }

    return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    UserDefaults.standard.set(indexPath.row, forKey: "NavBarColour")
    passOnNavBarColour.colour = indexPath.row
    tableView.reloadData()
    let RGB = colourRGBs[indexPath.row]
    self.navigationController?.navigationBar.backgroundColor = UIColor(red: RGB[0]/255.0, green: RGB[1]/255.0, blue: RGB[2]/255.0, alpha: 1.0)
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 44
}

例如,当我为蓝色执行此操作时,结果如下:

它应该比它应该更加微弱 .

我尝试了以下代码:

self.navigationController?.navigationBar.isTranslucent = false

我在设置单元格背景颜色之前运行

self.navigationController?.navigationBar.backgroundColor = UIColor(red: RGB[0]/255.0, green: RGB[1]/255.0, blue: RGB[2]/255.0, alpha: 1.0)

然而,这不会导致任何颜色变化 .

我该如何解决这个问题?

3 回答

  • 1

    您可以在 didFinishLaunchingWithOptions 中的 AppDelegate 中添加此简单行

    UINavigationBar.appearance().barTintColor = UIColor.blue
    
  • 0

    导航栏:

    navigationController?.navigationBar.barTintColor = UIColor.green
    

    将greenColor替换为您想要的任何UIColor,如果您愿意,也可以使用RGB .

    导航栏文字:

    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
    

    用您喜欢的任何颜色替换orangeColor .

    标签栏:

    tabBarController?.tabBar.barTintColor = UIColor.brown
    

    标签栏文字:

    tabBarController?.tabBar.tintColor = UIColor.yellow
    

    在最后两个中,将brownColor和yellowColor替换为您选择的颜色 .

  • 1

    使用 navigationBar.barTintColor

    来自Apple的文件:https://developer.apple.com/documentation/uikit/uinavigationbar/#1654191

    您可以使用barTintColor属性为导航栏背景指定自定义色调颜色 . 设置此属性会覆盖从条形样式推断出的默认颜色 . 与所有UIView子类一样,您可以使用tintColor属性控制导航栏中交互元素的颜色,包括按钮图像和 Headers .

    无法更改 navigationBar.backgroundColor ,因为它被一些视图隐藏 . 您可以通过断点查看视图层次结构 .

相关问题