我有一个UITableview有2个部分,第1部分有1行,第2部分有可变行数。当用户向上滚动桌子(手指向上移动)时,桌面视图会默认,但是当用户位于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上编写所有内容,如果没有可回收的单元格,这似乎是一个巨大的痛苦。
有人有任何建议吗?
答案 0 :(得分:9)
无需重新加载行,我只是直接更改了框架。确保设置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);
}
}