2012-02-03 13 views
6

私は2つのセクション、1つ目のセクションに1つの行、2つ目のセクションには可変量の行を持つUITableviewを持っています。ユーザがテーブルを上にスクロールすると(指が上に動く)、tableviewはデフォルトの動作ですが、ユーザがuitableviewの一番上にあり、下にスクロールすると(指は下に移動します)、最初のセクションの高さは、ユーザーがスクロールした分だけ増加します(タッチを離すと、行の高さが元の高さの100に戻ります)。私は uitableviewをスクロールしているときに特定のuitableviewcell行の高さを変更する

-(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方法は、0にcontentOffsetをリセットします。これがうまくいかない場合は、UIScrollViewにすべてを書き込む必要があり、リサイクル可能なセルがないと巨大な痛みのように思えます。

誰か提案はありますか?

答えて

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); 
    } 
} 
関連する問題