user3113382
user3113382

Reputation: 243

how can i make headerView scroll (not stay on the top of the tableview ) accompanying with UItableViewCell when i was scrolling tableview

in plainsytle tableview , we set headerViews for each section by delegate method

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section 

so,when i scrolling up tableview , the first section's headerView is always showing on the top of tableview before the section totally disappear on the tableview , then the second section's headerView will show on the top of tableview instead . so my question is how can i make headerView scroll accompanying with uitableViewCell , just like group style tableview ?

Upvotes: 24

Views: 43697

Answers (9)

Lal Krishna
Lal Krishna

Reputation: 16200

You can disable scrolling sectionHeader by changing the table property to -

UITableViewStyleGrouped

You have to set it on the initialisation of UITableView.

  • Change Table Style from Plain to Grouped on StoryBoard

OR

UITableView* table = [[UITableView alloc]initWithFrame:myFrame style:UITableViewStyleGrouped]; 

Upvotes: 28

Sadanand lowanshi
Sadanand lowanshi

Reputation: 11

Disable scrolling section header by changing the property from Storyboard

Storyboard

  1. Attributes inspector
  2. Style
  3. Change Style from plain to Grouped from the dropdown

image

Upvotes: 0

Charles McD
Charles McD

Reputation: 61

You can change the style of the tableView.

let tableView = UITableView(frame: .zero, style: .grouped)

Upvotes: 6

Otto
Otto

Reputation: 16

Swift:

As Hani Ibrahim pointed out you need to subclass UITableView. Apple says you : must specify style at creation.

So:

override init(frame: CGRect, style: UITableViewStyle) {
        super.init(frame: frame, style: .grouped)

Notice how my super.init uses .grouped as the style. For this style of tableview (.grouped) Apple also says:

Summary

A table view whose sections present distinct groups of rows. The section headers and footers do not float.

Then you can call the following tableView delegate methods: viewForHeaderInSection and heightForHeaderInSection (notice those are for headers only, use the footer counterparts if you want footers too)

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerLabel = UILabel()
        headerLabel.text = "My cool header title"
        headerLabel.textAlignment = .center
        headerLabel.font = UIFont(name: "OpenSans-Bold", size: 16)
        return headerLabel
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 44
    }

And that should do it! Good luck.

Upvotes: 0

Akshay Phulare
Akshay Phulare

Reputation: 1599

Just change style of table from "Plain" to "Grouped".

Upvotes: 21

Mohamed Ramadan
Mohamed Ramadan

Reputation: 38

Change the UITableViewStyle of the table from UITableViewStylePlain to UITableViewStyleGrouped, this will make the header scroll up with cells.

Upvotes: 2

iCodeAtApple
iCodeAtApple

Reputation: 466

I had the same issue and when i browsed i came to this link See The accepted answer from and I came to conclusion that you need to set tableViewHeader Style to Group and it works Charm.

Upvotes: 7

Yohan
Yohan

Reputation: 1108

if you ve more than one section, you can customize it using some thirdt party API

else you can try this using Grouped table instead of plain tableView.

Try like this when you assign custom view as tableView Header view it becomes header view for table and it will scroll with the table view

 -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        UIView *sectionView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 200)];

        tableView.tableHeaderView =sectionView;

        return sectionView;
    }

Upvotes: 3

Hani Ibrahim
Hani Ibrahim

Reputation: 1449

subclass the UITableView and override this method

- (BOOL)allowsHeaderViewsToFloat{
    return NO;
}

same for footer

- (BOOL)allowsFooterViewToFloat{
    return NO;
}

But I think that this is a private API ... You will not be able to submit it to the AppStore

If you will upload it to the AppStore; Then you have two other options

  1. Adding a normal cell instead of the section header
  2. If you have only one section, then you can simply use table header instead of section header

Upvotes: 14

Related Questions