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()
}
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 UILabel
textLabel
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
}
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)
}
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
}
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
}
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)
}
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
}
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.
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
}
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
}
Solution rapide 4.
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView:UIView = UIView()
headerView.backgroundColor = UIColor.lightGray
return headerView
}
Cela le changera pour tous les en-têtes de votre application:
UITableViewHeaderFooterView.appearance().backgroundColor = theme.subViewBackgroundColor
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
}