13

In my willDisplayHeaderView I have changed color of section header But I want to add an image before section title. Any help? My code for willDisplayHeaderView is

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView 
    header.contentView.backgroundColor = UIColor(red: 238/255, green: 168/255, blue: 15/255, alpha: 0.8)
    header.textLabel.textColor = UIColor.whiteColor()
    header.alpha = 1
}
Saqib Omer
  • 5,387
  • 7
  • 50
  • 71

7 Answers7

11

You could design your own header, like you would design a custom cell in a table view. Or you could just add an image like so:

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

    var myCustomView: UIImageView
    var myImage: UIImage = UIImage(named: "myImageResource")
    myCustomView.image = myImage

    let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView
    header.addSubview(myCustomView)
    return header
}

Then you can simply add your section title UILabel as another subview.

Anfaje
  • 335
  • 4
  • 14
  • 5
    let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView This simply doesn't work here... – Mikael Feb 23 '16 at 02:11
  • I have added this myCustomView programmatically but it's not showing any image while running?? @Anfaje – Parth Barot May 23 '18 at 06:42
  • Just initialize myCustomView as `var myCustomView: UIImageView = UIimageView()`. An error will disappear – shripad20 Aug 01 '18 at 14:00
8

Simply Add the following code in your viewDidLoad() method.

    var frame = CGRectMake(0, 0, self.view.frame.size.width, 200)
    var headerImageView = UIImageView(frame: frame)
    var image: UIImage = UIImage(named: "yourImage")!
    headerImageView.image = image
    youTableView.tableHeaderView = headerImageView
Ram
  • 3,092
  • 10
  • 40
  • 56
Jabbar
  • 590
  • 1
  • 7
  • 21
6

Here it is how we can add custom header in UITableView.

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
     let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView
     let imageViewGame = UIImageView(frame: CGRectMake(5, 8, 40, 40));
     let image = UIImage(named: "Games.png");
     imageViewGame.image = image;
     header.contentView.addSubview(imageViewGame)
}
Saqib Omer
  • 5,387
  • 7
  • 50
  • 71
5

I use this method below in my proj.

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
{
    let uilbl = UILabel()
    //uilbl.numberOfLines = 0
    //uilbl.lineBreakMode = NSLineBreakMode.ByWordWrapping
    //uilbl.text = "blablabla"
    uilbl.sizeToFit()
    uilbl.backgroundColor =  UIColor(patternImage: UIImage(named: "yr-img-name")!)

    return uilbl
}
Hitesh
  • 3,449
  • 8
  • 39
  • 57
Nik
  • 176
  • 1
  • 9
4

For Swift 3

  override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let header = view as! UITableViewHeaderFooterView
    header.textLabel?.textColor = UIColor.white
    let headerImage = UIImage(named: "headerBanner.jpg")
    let headerImageView = UIImageView(image: headerImage)
    header.backgroundView = headerImageView
}
4

This will work with swift 4

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerImage: UIImage = UIImage(named: "image")!
    let headerView = UIImageView(image: headerImage)
    return headerView
}
kroky
  • 474
  • 3
  • 11
3

Swift 5

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let imageView = UIImageView();
    let image = UIImage(named: "logo")
    imageView.contentMode = .center
    imageView.image = image;
    return imageView
}

  // Optionally you can set the header height here.
  override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 85
    }
MrAn3
  • 1,335
  • 17
  • 23