滚动 uitableview 时更改特定的 uitableviewcell 行高

Posted

技术标签:

【中文标题】滚动 uitableview 时更改特定的 uitableviewcell 行高【英文标题】:Changing a specific uitableviewcell row height while scrolling a uitableview 【发布时间】:2012-02-03 08:40:18 【问题描述】:

我有一个 UITableview,它有 2 个部分,第一个部分有 1 行,第二个部分有可变数量的行。当用户向上滚动表格(手指向上移动)时,tableview 会执行默认操作,但是当用户位于 uitableview 顶部并向下滚动(手指向下移动)时,它应该看起来像第一个单元格第一部分的高度随着用户向下滚动而增加(释放触摸会将行的高度更改回其原始高度 100)。我试过了

-(void)scrollViewDidScroll:(UIScrollView*)scrollView
    if(scrollView.contentOffset.y < 0)
        [mainTable reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection: 0]] withRowAnimation:UITableViewRowAnimationNone];
    


-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
    if(indexPath.section == 0 && tableView.contentOffset.y < 0)
        return -tableView.contentOffset.y+100;//Default height is 100
    

但是 reloadRows 方法将 contentOffset 重置为 0,因此当我下拉时,tableview 只会结结巴巴。似乎如果这不起作用,那么我将不得不在 UIScrollView 上编写所有内容,如果没有可回收的单元格,这似乎是一个巨大的痛苦。

有人有什么建议吗?

【问题讨论】:

【参考方案1】:

无需重新加载行,我只是直接更改了框架。确保设置 cell.layer.masksToBounds = YES 并使单元格中的子视图大于原始单元格高度。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
    if (mainTable.contentOffset.y < 0) 
        UITableViewCell *cell = [mainTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
        float rawr = mainTable.contentOffset.y;
        cell.frame = CGRectMake(cell.frame.origin.x, rawr, cell.frame.size.width, 100-rawr);
    

【讨论】:

以上是关于滚动 uitableview 时更改特定的 uitableviewcell 行高的主要内容,如果未能解决你的问题,请参考以下文章

iPhone通过滑出表格视图来滚动UITableview

当 scrollViewDidEndDragging 时 UITableView 滚动到特定点

加载视图控制器时如何滚动到特定的 UITableViewCell 顶部到 UITableView 顶部

UIScrollView 有时会在更改内部 UITableView 的高度时失去滚动

带有 uisearchDisplayController 的 UItableView 在 ios 7 中滚动时更改了 contentoffset

Swift:当节标题高度动态更改时,UITableView 滚动回顶部