我有一个包含2个部分的UITableview,第一个部分有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上编写所有内容,而且如果没有可回收单元,这似乎是一个巨大的痛苦。

有人有什么建议吗?

最佳答案

无需重新加载行,我只是直接更改了框架。确保设置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);
    }
}

07-24 09:50
查看更多