ichigo9000
ichigo9000

Reputation: 9

tableView: multiple sections with different style

I am trying to create a single table in Xcode and I want 3 sections in that table each with different headers.

I want to stick only the header of last section when it scrolls on top not the other sections.

Is there a way to do so please suggest me..

Upvotes: 0

Views: 1814

Answers (3)

Matt Le Fleur
Matt Le Fleur

Reputation: 2865

You could achieve the same behaviour by having a custom cell that would act as the header in the first two sections. And then remove the actual header for those.

For example:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if (indexPath.section == 0 || indexPath.section == 1) && indexPath.row == 0 {
        return HeaderCell()
    }

    // return your desired cells (make sure to handle the number of
    // rows properly as there is effectively 1 more than normal in
    // in the first two sections now)
}

You'll also need to adjust the headers for the first two sections:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    if section == 2 { return YourHeaderView() }

    return nil
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    if section == 2 { return yourHeight }

    return 0
}

Also, in the numberOfRows delegate function, you should make sure you add 1 (which will be the HeaderCell).

Upvotes: 0

Yash Agarwal
Yash Agarwal

Reputation: 11

You can set the UITableView style to Plain. It will stick all the section header while scrolling.

I think that is not possible to stick the particular section header.

Upvotes: 0

rana5ohaib
rana5ohaib

Reputation: 176

1- Yes, you can do that. In numberOfSections method of UITableViewDelegate, specify how many sections you want. And in viewForHeaderInSection method of UITableviewDelegate, provide a custom view for each section.

func numberOfSections(in tableView: UITableView) -> Int {
    return 3
}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    
    // Make custom header view for each section
    if section == 0 {
        let header1 = UIView()
        return header1

    } else if section == 1 {
        let header2 = UIView()
        return header2

    } else if section == 2 {
        let header3 = UIView()
        return header3
    }
}

2- No, you can not do that. UITableView does not allow you to specify that which particular header should stick to the top and which one should not.

Upvotes: 3

Related Questions