Change the sections header background color in UITableView using an array of headers Change the sections header background color in UITableView using an array of headers ios ios

Change the sections header background color in UITableView using an array of headers


If you're using only titleForHeaderInSection :

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {    (view as! UITableViewHeaderFooterView).contentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)    (view as! UITableViewHeaderFooterView).textLabel?.textColor = UIColor.white}


Instead of using the

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

data source method, you can use the

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

delegate method and simply customize the UIView returned as you wish.

For example set the text of the UILabel textLabel to your desired value and the backgroundColor to the desired UIColor.

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        }


You have to keep both

titleForHeaderInSection

AND

viewForHeaderInSection

Here is some working code in Swift 3

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}