2014-06-10 5 views
0

UITableView에 "셀에 스냅"효과를 구현하려고합니다. 내 UITableView에는 동일한 크기의 셀이 3 개 있지만 어떤 이유로 인해 UITableView은 항상 셀 0 또는 셀 1에 스냅하고 세 번째 셀에는 스냅하지 않습니다. 그것도 잘못 약 50 점 너무 낮아서, 당신이 얼마나 열심히 슬라이드. 가장 명확한 코드를 사용하여 효과를 작성하므로 작동하지 않는 이유를 이해할 수 없습니다.셀에 UITableView 스냅

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { 
    NSIndexPath *pathForTargetTopCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), targetContentOffset->y)]; 
    DLog(@"indexPathForRow %d", pathForTargetTopCell.row); 
    targetContentOffset->y = [self.tableView rectForRowAtIndexPath:pathForTargetTopCell].origin.y; 
} 

무엇이 잘못 될 수 있는지에 대한 의견이 있으십니까?

EDIT : 정확히 64 포인트 씩 떨어져서 상태 표시 줄과 탐색 표시 줄과 관련이 있다고 생각됩니다.

단지에 대한

if([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) 
    [self setAutomaticallyAdjustsScrollViewInsets:NO]; 

편집 : 그것은, 비록 마지막 셀 .. 오프셋 (offset) 상태 표시 줄에 대한

답변

3

을 인식하여 VC의 viewDidLoad에서이 작업을 수행하지 않는 이유를 아직 설명하지 않습니다 테스트, 당신은 4 똑같이 크기의 세포를 추가하고 3 및 4 세포에 물리기를 시도 할 수 있습니까?

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { 

    NSIndexPath *pathForCenterCell = [self.tableView indexPathForRowAtPoint:CGPointMake(CGRectGetMidX(self.tableView.bounds), CGRectGetMidY(self.tableView.bounds))]; 

    [self.tableView scrollToRowAtIndexPath:pathForCenterCell atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 
} 
+0

추가 된 4 일 지금은 세 번째까지 스크롤, 다음과 같이

scrollViewWillEndDragging 구현을 수정합니다. 엄밀히 말하면 해결할 수는 있겠지만, 실제로는 정말 해킹입니다. –

+0

내 대답을 편집했습니다. 그게 효과가 있는지 확인하십시오. –

+0

그것은 효과가있다! 나는 속도의 방향에 따라 순서대로 다음 셀에 항상 "스냅"되도록 구현을 변경하기로 결정했습니다. 그러나 이것이 성취되기 전에 내가 시도한 것을 받아들입니다. 그러나 이것은 셀의 크기가 화면의 크기에 가까운 경우에만 작동합니다. –

관련 문제