C. Albert
C. Albert

Reputation: 45

Swift - Changing the vertical alignment of title for Header section in a TableView

I am using the following code to populate the headers of my function:

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

    switch section {

    case 0: "SECTION 0"

    case 1: "SECTION 1"

    default: break

    }

    return nil
}

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
{
    var title = UILabel()
    title.font = UIFont(name: "HelveticaNeue-Light", size: 12)!
    title.textColor = UIColor.blackColor()

    let header = view as! UITableViewHeaderFooterView
    header.textLabel?.font=title.font
    header.textLabel?.textColor=title.textColor
    header.backgroundView?.backgroundColor = UIColor.whiteColor()

}

Now, I would like to be able to change the vertical alignment of the title in the section, like in the following picture:

Changing the vertical alignment of the title in the section of the TableView

How can I do that?

Upvotes: 3

Views: 4633

Answers (3)

Simran Singh Sandhu
Simran Singh Sandhu

Reputation: 501

I would suggest to add a footer if you want to drop your label a little bit down.

Upvotes: 0

Faraaz
Faraaz

Reputation: 137

This code will vertical align the label, not sure its a great approach but sure works. you would rather create a view and use viewForHeaderSection.

guard let header = view as? UITableViewHeaderFooterView else { return }
header.translatesAutoresizingMaskIntoConstraints = false
header.textLabel?.translatesAutoresizingMaskIntoConstraints = false
header.textLabel?.centerYAnchor.constraint(equalTo: header.contentView.centerYAnchor).isActive = true

Upvotes: -1

Lahav
Lahav

Reputation: 791

Unfortunately there is no way to vertically align the text in a UILabel. This SO post goes into more detail.

But you can accomplish a similar affect by adding the label to a parent UIView, and constraining it to the bottom. Then you can return that view in the viewForHeaderInSection tableview Data-source method

let headerView = UILabel(frame: CGRect(origin: CGPointZero, size: CGSize(width: self.view.frame.width, height: 50)))
let label = UILabel(frame: CGRect(x: 0, y: 20, width: self.view.frame.width, height: 30))
label.text = "Some Text"
headerView.addSubview(label)
return headerView

Upvotes: 8

Related Questions