Я пытаюсь изменить цвет фона панели навигации, но у меня возникли проблемы:

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)

Однако это не приводит к изменению цвета вообще.

Как мне решить эту проблему?

0
D-A UK 21 Авг 2018 в 11:02

3 ответа

Лучший ответ

Используйте navigationBar.barTintColor

Из документа Apple: https://developer.apple.com/documentation/uikit/uinavigationbar / # 1654191

Вы можете указать собственный цвет оттенка для фона панели навигации, используя свойство barTintColor. Установка этого свойства переопределяет цвет по умолчанию, выведенный из стиля панели. Как и во всех подклассах UIView, вы можете управлять цветом интерактивных элементов на панелях навигации, включая изображения кнопок и заголовки, используя свойство tintColor.

Не удалось изменить navigationBar.backgroundColor, поскольку он скрыт несколькими видами. Вы можете увидеть иерархию представления по точке останова.

enter image description here

1
black_pearl 21 Авг 2018 в 08:28

Панель навигации:

navigationController?.navigationBar.barTintColor = UIColor.green

Замените greenColor на любой UIColor, который вы хотите, вы также можете использовать RGB, если хотите.

Текст навигационной панели:

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

Замените оранжевый цвет тем, который вам больше нравится.

Панель вкладок:

tabBarController?.tabBar.barTintColor = UIColor.brown 

Текст панели вкладок:

tabBarController?.tabBar.tintColor = UIColor.yellow 

На последних двух замените коричневый цвет и желтый цвет на цвет по вашему выбору.

2
Mohsen Sedaghat Fard 21 Авг 2018 в 08:13

Вы можете добавить эту простую строку в didFinishLaunchingWithOptions в AppDelegate

UINavigationBar.appearance().barTintColor = UIColor.blue
1
Tung Vu Duc 21 Авг 2018 в 08:26
51944214