2012-02-03 1 views
6

2 섹션, 첫 번째 섹션에서 1 행 및 두 번째 섹션에 대한 다양한 양의 행 가진 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 
    } 
} 

을 시도하지만 난 풀다운 때 그래서있는 tableview 그냥 더듬 reloadRows 방법은 0으로 contentOffset를 재설정합니다. 이것이 작동하지 않는 것처럼 보이면 UIScrollView에 모든 것을 써야하며 재활용 가능한 셀이 없으면 큰 고통이 될 것 같습니다.

아무도 제안 사항이 있습니까?

답변

9

행을 다시로드 할 필요가 없습니다. 프레임을 직접 변경했습니다. cell.layer.masksToBounds = YES로 설정하고 셀의 subView가 원래 셀 높이보다 커야합니다.

-(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); 
    } 
}