如何为 UITableView 部分标题动态设置背景颜色?

Posted

技术标签:

【中文标题】如何为 UITableView 部分标题动态设置背景颜色?【英文标题】:How to dynamically set background color for UITableView section headers? 【发布时间】:2014-05-04 04:55:37 【问题描述】:

我正在努力实现类似于 iPhone 上的照片应用程序的 UITableView 部分标题。顶部标题视图应具有灰色背景,其他标题视图应具有白色背景。基于此,我有几个问题需要帮助:

    如何找出哪个节标题在顶部(例如,与导航栏相邻)?请注意,导航栏是半透明的(这意味着它在其下方显示单元格),因此我无法通过查找可见单元格然后基于此检索部分。

    将顶部标题的背景颜色更改为不同的颜色,然后在不再是顶部时返回原始颜色的方法应该是什么?

【问题讨论】:

你问的是节标题吗? @Morpheus - 是的,部分标题。 【参考方案1】:

创建属性NSUInteger sectionPath 并在viewDidLoad 中使用0 对其进行初始化。

创建一个 headerView 并为特定部分更改该视图的背景颜色。

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

    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, headerView.frame.size.width, headerView.frame.size.height)];

    headerLabel.textAlignment = NSTextAlignmentCenter;
    headerLabel.text = [titleArray objectAtIndex:section];

    if(section == sectionPath) 
        headerLabel.backgroundColor = [UIColor grayColor];
    
    else 
        headerLabel.backgroundColor = [UIColor whiteColor];
    

    [headerView addSubview:headerLabel];    

    return headerView;

在滚动过程中动态查找UITableView 中最顶部的标题

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    for (NSIndexPath* i in [yourTableViewName indexPathsForVisibleRows]) 
      sectionPath = [i indexAtPosition:0];
    

【讨论】:

那行不通。我需要标题根据哪个在顶部动态更改颜色。因此,一旦标题滚动离开,它需要将颜色更改为白色。然后出现在顶部的那个需要切换到灰色。 意味着,在滚动时,您希望最上面的标题具有灰色背景色? 正确。滚动最上面的标题以保持灰色,其余为白色。就像在 ios7 上的照片应用程序中一样

以上是关于如何为 UITableView 部分标题动态设置背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何为tableView部分的第一个和最后一个单元格设置圆角

如何为自定义 UITableView 标题部分笔尖添加分隔线? [复制]

如何为uitableview的所有行和所有部分创建索引路径?

如何为 UITableView 设置自动高度?

如何为 UITableView 标题设置颜色文本颜色

如何为不同的 UITableView 部分使用不同的表格视图单元格类