2012-02-03 28 views
6

Tôi có UITableview với 2 phần, 1 hàng trong phần 1 và một số lượng hàng thay đổi cho phần thứ hai. Khi người dùng cuộn bảng lên (ngón tay di chuyển lên trên), thì tableview làm điều mặc định, nhưng khi người dùng ở trên cùng của uitableview và cuộn xuống (ngón tay di chuyển xuống dưới) thì nó sẽ giống như ô đầu tiên trong chiều cao phần đầu tiên tăng nhiều như người dùng cuộn xuống (và thả cảm ứng sẽ thay đổi chiều cao của hàng trở về chiều cao ban đầu là 100). Tôi đã thửThay đổi chiều cao hàng uitableviewcell cụ thể trong khi cuộn uitableview

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

nhưng phương thức reloadRows đặt lại contentOffset thành 0 để bảng nhìn chỉ giật khi tôi kéo xuống. Nó có vẻ như nếu điều này không làm việc, sau đó tôi sẽ phải viết tất cả mọi thứ trên một UIScrollView và nó có vẻ giống như một nỗi đau rất lớn mà không có các tế bào tái chế.

Có ai có bất kỳ đề xuất nào không?

Trả lời

9

Không cần phải tải lại hàng, tôi chỉ cần thay đổi khung trực tiếp. Hãy chắc chắn rằng bạn đặt cell.layer.masksToBounds = YES và làm cho các subViews trong ô sẽ lớn hơn chiều cao ô ban đầu.

-(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); 
    } 
} 
Các vấn đề liên quan