web-dev-qa-db-fra.com

Changer la couleur de fond de l'en-tête de sections dans UITableView à l'aide d'un tableau d'en-têtes

J'ai un éventail d'en-têtes que j'utilise

let sectionHeaderTitleArray = ["test1","test2","test3]

et ils sont montrés en utilisant

func tableView[tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.sectionHeaderTitleArray[section] as String
} 

Maintenant, tout cela fonctionne bien, mais je voudrais modifier la couleur de fond des en-têtes afin qu’ils soient plus visibles (Couleur plus sombre)

aucune idée si je peux le faire en une simple ligne ou dois-je utiliser une cellule personnalisée pour créer cette

merci

mise à jour

  //number of sections and names for the table

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return self.sectionHeaderTitleArray.count
    }

    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return self.sectionHeaderTitleArray[section] as String
    }
    func tableView(tableView: UITableView, ViewForHeaderInSection section: Int) -> UIView? {
        return self.tableView.backgroundColor = UIColor.lightGrayColor()
    }
42
Jp4Real

Au lieu d'utiliser le

func tableView(_ tableView: UITableView,titleForHeaderInSection section: Int) -> String?

méthode de source de données, vous pouvez utiliser le

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

méthode déléguée et personnalisez simplement le UIView renvoyé comme vous le souhaitez.

Par exemple, définissez le texte de UILabeltextLabel sur la valeur souhaitée et de backgroundColor sur le UIColor souhaité.

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let returnedView = UIView(frame: CGRectMake(x, y, width, height)) //set these values as necessary
    returnedView.backgroundColor = UIColor.lightGrayColor()

    let label = UILabel(frame: CGRectMake(labelX, labelY, labelWidth, labelHeight))
    label.text = self.sectionHeaderTitleArray[section]
    returnedView.addSubview(label)

    return returnedView
}

Swift 5

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            let returnedView = UIView(frame: CGRect(x: x, y: y, width: width, height: height)) //set these values as necessary
            returnedView.backgroundColor = .white

            let label = UILabel(frame: CGRect(x: x, y: y, width: width, height: height))

            label.text = self.sectionHeaderTitleArray[section]
            returnedView.addSubview(label)

            return returnedView
        }
27
Jack C

Si vous utilisez uniquement titleForHeaderInSection:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    (view as! UITableViewHeaderFooterView).backgroundView?.backgroundColor = UIColor.black.withAlphaComponent(0.4)
}
76
Jovan Stankovic

Vous devez garder les deux

titleForHeaderInSection

ET

viewForHeaderInSection

Voici un code de travail dans Swift

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return self.sectionHeaderTitleArray[section]
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let returnedView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 25))
    returnedView.backgroundColor = .lightGray

    let label = UILabel(frame: CGRect(x: 10, y: 7, width: view.frame.size.width, height: 25))
    label.text = self.sectionHeaderTitleArray[section]
    label.textColor = .black
    returnedView.addSubview(label)

    return returnedView
}
15
AMAN77

Swift 4

Super facile, en réglant la vue d'en-tête, la couleur d'arrière-plan contentView.

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
   let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "headerId") as! CustomHeader
   header.contentView.backgroundColor = AnyColor
   return header
}
10
MAGiGO

Swift 4.X

Ceci est testé et fonctionne le code.

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return "Total Count (41)"
}

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    view.tintColor = UIColor.lightGray
    let header = view as! UITableViewHeaderFooterView
    header.textLabel?.textColor = UIColor.darkGray
    header.textLabel?.font = UIFont.systemFont(ofSize: 14, weight: .medium)
}
7
Ashu

Swift 3 +

J'ai utilisé ceci:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: 20))
    headerView.backgroundColor = .lightGray

    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = stringValues[section]
    headerView.addSubview(label)
    label.leftAnchor.constraint(equalTo: headerView.leftAnchor).isActive = true
    label.rightAnchor.constraint(equalTo: headerView.rightAnchor).isActive = true
    label.centerYAnchor.constraint(equalTo: headerView.centerYAnchor).isActive = true
    label.heightAnchor.constraint(equalToConstant: 25).isActive = true

    return headerView

}
3
Dasoga

Si vous utilisez titleForHeaderInSection, le moyen le plus simple consiste à ajouter dans viewDidLoad ():

self.tableView.backgroundColor = UIColor.clear

Pour une raison quelconque, définir ClearColor pour Background dans la section View de TableView dans Interface Builder ne le définit pas toujours sur transparent. Mais l'ajout de cette ligne dans le code (pour moi au moins) le fait.

3
Gefilte Fish

Swift 4 changer la couleur de fond et la couleur du texte:

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    guard let tableView = view as? UITableViewHeaderFooterView else { return }
    tableView.backgroundView?.backgroundColor = UIColor.black
    tableView.textLabel?.textColor = UIColor.white
}
1
blacker

Swift 5

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    guard let headerView = view as? UITableViewHeaderFooterView else { return }

    headerView.backgroundView?.backgroundColor = .red
}

Et, si vous voulez des couleurs d'arrière-plan (et/ou de texte) d'en-tête différentes pour chaque section:

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    guard let headerView = view as? UITableViewHeaderFooterView else { return }

    switch section {

    case 0:
        headerView.backgroundView?.backgroundColor = .red
        headerView.textLabel?.textColor = .white
    case 1:
        headerView.backgroundView?.backgroundColor = .green
        headerView.textLabel?.textColor = .white
    case 2:
        headerView.backgroundView?.backgroundColor = .yellow
        headerView.textLabel?.textColor = .black

        // etc

    default:
        return
    }
1
rbaldwin

Solution rapide 4.

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView:UIView = UIView()
        headerView.backgroundColor = UIColor.lightGray
   return headerView
}
1
dscrown

Cela le changera pour tous les en-têtes de votre application:

UITableViewHeaderFooterView.appearance().backgroundColor = theme.subViewBackgroundColor
0
devjme

redéfinissez viewForHeaderInSection et créez UITableViewHeaderFooterView

 override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    var headrview = tableView.dequeueReusableHeaderFooterView(withIdentifier: "aaa")
    if headrview == nil {
        headrview = UITableViewHeaderFooterView(reuseIdentifier: "aaa")
    }
    let bview = UIView()
    bview.backgroundColor = Theme.current.navigationColor
    headrview?.backgroundView = bview
    headrview?.textLabel?.textColor = Theme.current.primaryTextColor
    return headrview
}
0
KMI