我的UITableView中有几个部分,有时可以有0行。如果numberOfRowsInSection等于0,我该如何删除节头?
以下是我的部分代码:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 22)];
/* Create custom view to display section header... */
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(60, 0, tableView.frame.size.width, 22)];
[label setFont:[UIFont boldSystemFontOfSize:14]];
[label setTextColor:[UIColor whiteColor]];
NSString *string =[[theLeagueArray objectAtIndex:section] objectForKey:@"league"];
[label setText:string];
[view addSubview:label];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 22)];
[imgView setImage:[UIImage imageNamed:[[theLeagueArray objectAtIndex:section] objectForKey:@"img"]]];
[view addSubview:imgView];
[view setBackgroundColor:[UIColor colorWithRed:13/255.0f green:78/255.0f blue:102/255.0f alpha:1.0f]];
return view;
}
答案 0 :(得分:0)
尝试deleteSections:withRowAnimation:
方法。这将使用可选动画将其从视图中删除,而不会影响您的后备数据。 (但是,您应该更新数据,以便不再出现该部分。)
答案 1 :(得分:0)
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
// If array count 0
if([[workoutarray objectAtIndex:section] count]==0)
{
return nil;
}
else {
}
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
// If array count 0
if([[workoutarray objectAtIndex:section] count]==0)
{
return 0;
}
else
{
return 25;
}
}
答案 2 :(得分:0)
基本上,正确的方法是在表视图上执行deleteSections:withRowAnimation:
,不要忘记更新数据源。
但是你也可以返回UIView
高度为0.1(它有点黑客),所以在这种情况下它对用户是不可见的。要更新部分,请执行reloadSections:withRowAnimation:
方法。
它看起来像这样:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if ([tableView numberOfRowsInSection:section] == 0) {
return [[UIView alloc] init];
}
...
}
答案 3 :(得分:0)
查看tableView:heightForHeaderInSection:的参考文档,并在需要隐藏节标题时返回0(同样在tableView:viewForHeaderInSection:
中返回nil以减少总计算次数。)
此外,如果你定位iOS 7,你可以使用新的tableView:estimatedHeightForHeaderInSection:
进行更多优化。