Ios 向下滚动后更改节标题视图
我想在用户向下滚动时修改节标题视图,类似于音乐应用程序中的内容 (注意视图背景颜色如何更改并获得底部边框) 当视图位于部分顶部或处于滚动位置时,是否有好的跟踪方法 更新: 到目前为止,我唯一的解决方案是保留一个包含所有节头视图的数组,并更改scrollViewDidScroll:delegate方法中第一个可见节的视图(使用tableView.indexPathsForVisibleRows数组获取第一个可见节索引)Ios 向下滚动后更改节标题视图,ios,objective-c,cocoa-touch,ios7,Ios,Objective C,Cocoa Touch,Ios7,我想在用户向下滚动时修改节标题视图,类似于音乐应用程序中的内容 (注意视图背景颜色如何更改并获得底部边框) 当视图位于部分顶部或处于滚动位置时,是否有好的跟踪方法 更新: 到目前为止,我唯一的解决方案是保留一个包含所有节头视图的数组,并更改scrollViewDidScroll:delegate方法中第一个可见节的视图(使用tableView.indexPathsForVisibleRows数组获取第一个可见节索引) 如果有人能想出一个更简单的方法,那就太好了 可能存在一个更简单的解决方案,但
如果有人能想出一个更简单的方法,那就太好了 可能存在一个更简单的解决方案,但这将是实现您想要的一种方法:
- 删除tableHeader,并将其作为单独的子视图添加到viewController视图中(注意:不要使用uitableviewController,因为该viewController将tableview作为其视图,而您不希望这样做)
- 向下移动tableView,使其正好位于以前的tableheader视图下
- 计算并设置tableView(它是一个UIScrollView)的contentOffset,这样单元格就不会跳转到新位置
- (id)init{
self = [super init];
if (self) {
UIView *line = [[UIView alloc] init];
[line setTranslatesAutoresizingMaskIntoConstraints:NO];
line.backgroundColor = [UIColor darkGrayColor];
[self addSubview:line];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[line]|" options:0 metrics:nil views:@{@"line":line}]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[line]|" options:0 metrics:nil views:@{@"line":line}]];
[line addConstraint:[NSLayoutConstraint constraintWithItem:line attribute:NSLayoutAttributeHeight relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:1]];
self.bottomLine = line;
self.bottomLine.hidden = YES;
}
return self;
}
“表视图”控制器中的相关方法:
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
RDHeaderView *header = [[RDHeaderView alloc] init];
header.contentView.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1];
return header;
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSInteger topSection = [[self.tableView indexPathsForVisibleRows].firstObject section];
NSInteger sectionYOffset = [self.tableView rectForHeaderInSection:topSection].origin.y;
RDHeaderView *pinnedHeader = (RDHeaderView *)[self.tableView headerViewForSection:topSection];
pinnedHeader.bottomLine.hidden = ((scrollView.contentOffset.y - sectionYOffset) > 5)? NO: YES;
CGFloat colorOffset = fmaxf(0.6, 0.9 - (scrollView.contentOffset.y - sectionYOffset)/1000.0);
if (colorOffset > 0.9) colorOffset = 0.9;
pinnedHeader.contentView.backgroundColor = [UIColor colorWithWhite:colorOffset alpha:1];
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 80;
}
很抱歉,这将更改所有节标题视图,您知道,我在表视图中有多个节。想到了一个类似的解决方案,其中我跟踪所有截面位置,并使用滚动视图代理方法相应地更改视图。我正在寻找一个动态的解决方案(如果有的话)@EdLess,我已经改变了我的答案,以显示我是如何在多个部分完成它的。