Objective c 调用reloadData:时不调用viewForHeaderInSection:视图

Objective c 调用reloadData:时不调用viewForHeaderInSection:视图,objective-c,ios7,uitableview,Objective C,Ios7,Uitableview,我创建了一个UITableView并设置了“委托”和“数据源”,每次调用reloadData,它都会进入以下方法: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [self.headersList count]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sect

我创建了一个
UITableView
并设置了“委托”和“数据源”,每次调用
reloadData
,它都会进入以下方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.headersList count];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    SectionInfo *headerInfo = (self.headerInfoArray)[section];
NSInteger numOfObjectsInSection = [[headerInfo.list objectsInList] count];
    return headerInfo.open ? numOfObjectsInSection : 0;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return SECTION_HEADER_HEIGHT;
}
方法是:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.headersList count];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    SectionInfo *headerInfo = (self.headerInfoArray)[section];
NSInteger numOfObjectsInSection = [[headerInfo.list objectsInList] count];
    return headerInfo.open ? numOfObjectsInSection : 0;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return SECTION_HEADER_HEIGHT;
}
然后停下来!它不会进入
viewforheaderin部分:
方法。我还实施了以下方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [self.headersList count];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    SectionInfo *headerInfo = (self.headerInfoArray)[section];
NSInteger numOfObjectsInSection = [[headerInfo.list objectsInList] count];
    return headerInfo.open ? numOfObjectsInSection : 0;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return SECTION_HEADER_HEIGHT;
}
  • 知道我使用打开/关闭部分功能!因此,首先关闭所有节,每个节中的行数为0,但返回的节数是正确的(当打开节时,更新行数)
  • 它显示标题视图的唯一方法是等待一段时间,直到它自动重新加载!或者我上下滑动
viewForHeaderInSection
方法:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UISectionHeaderView *sectionHeaderView = [[UISectionHeaderView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, SECTION_HEADER_HEIGHT)];

    SectionInfo *sectionInfo = (self.headerInfoArray)[section];
    sectionHeaderView.open = sectionInfo.open;
    sectionInfo.headerView = sectionHeaderView;

    sectionHeaderView.titleLabel.text = [NSString stringWithFormat:@"%@ (%lu)",sectionInfo.list.title, (unsigned long)[sectionInfo.list.objectsInList count]];
    sectionHeaderView.section = section;
    sectionHeaderView.delegate = self;

    return sectionHeaderView;
}

您应该实现
heightForHeaderInSection:
并将收割台的高度设置为>0的值

同样的问题也发生在我身上,这是因为tableview没有为页眉找到高度,但由于我使用自动高度计算xCode 9,我无法给出任何明确的高度值。经过一些实验,我得到了解决方案,我们必须覆盖这个方法,如下所示:

-(CGFloat)tableView:(UITableView *)tableView 
         estimatedHeightForHeaderInSection:(NSInteger)section
{
      return 44.0f;
}
虽然我已选中了两个选项

  • 自动高度计算
  • 自动估计高度计算
  • 正如苹果公司所说,从故事板上看,我还是犯了一个奇怪的错误


    请注意:此错误仅在IOS-10版本上显示,而不是在IOS-11版本上显示。可能是xCode的一个bug。谢谢

    我假设您将类设置为
    数据源
    UITableView
    委托
    ,对吗?您也可以使用重载部分方法尝试不同的方法。显示您的表视图页眉和页脚视图数据源回调,以查看是否存在问题。耶,数据源和委托没有问题。此行为仅在所有节都关闭时发生。@J2theC您的意思是ViewForHeaderSection:method吗?@dasblinkenlight-yah不起作用