2015-01-10 2 views
1

사용자 정의 셀이있는 UITableView가 있습니다. 셀의 높이는 항상 200입니다. 첫 번째 셀의 스크롤을 움직이기 원합니다. 이것은 scrollToRowAtIndexPath을 사용하여 작동합니다. 그러나 행이 뷰의 맨 위에 표시되는 반면 표시되는 tableView에는 데드 센터로 나타나기를 원합니다. tableView의 contentInset 속성을 다른 값으로 설정하려고했지만 아무 것도 올바른 오프셋을 제공하지 않는 것 같습니다. 어떤 제안?첫 번째 표 셀을 가운데로 스크롤

+0

귀하의 contentInset 두 가지로 나눈있는 tableview 마이너스 내가 생각하는 것 tableViewCell의 절반 높이의 높이가 될 것입니다. 너 그거 해봤 니? – Emil

+0

@ 에밀, 무슨 뜻인지 모르겠다. contentInset은 UIEdgeInsets 유형이므로 위쪽, 아래쪽, 왼쪽 및 오른쪽 값을 사용합니다. 당신의 도움을 주셔서 감사합니다. – carlbenson

+0

그래, 상단 인세 트는 tableView 높이에서 셀 높이의 절반을 뺀 값의 절반이됩니다. – Emil

답변

2

UITableView 실제로 이것에 대한 깔끔한 방법이 있습니다

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath 
       atScrollPosition:(UITableViewScrollPosition)scrollPosition 
         animated:(BOOL)animated 
셀이 같이있는 tableView의 중심에 어디 있는지 지점에있는 tableView를 스크롤하는 데 사용할 수 있습니다

:

[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:TRUE]; 
+0

이 작동하지 않습니다. ScrollPositionMiddle를 지정하더라도 행 0의 인덱스로 스크롤하면 해당 셀이 맨 위에 표시됩니다. – carlbenson

+0

위의 셀이 없으므로 예상되는 동작입니다. 스크롤 뷰는 첫 번째 셀에서 시작되고 그 위로 스크롤 할 수 없습니다. 원하는 효과를 얻으려면 인세 트를 사용해야합니다. 질문에 대한 내 의견을 참조하십시오. – Emil

0

내가 이것을 할 수있는 유일한 방법은 scrollToRowAtIndexPath 대신 scrollRectToVisible을 사용하는 것이 었습니다. 어떠한 이유로 든 (아마도 테이블을 스크롤링 할 수 없기 때문에) scrollToRowAtIndexPathcontentInset을 결합하는 @ Emil의 제안을 사용해도 위치 지정은 여전히 ​​해제되었습니다.

이 작동 :

tableView.contentInset = UIEdgeInsets(top: cellHeight, left: 0, bottom: cellHeight, right: 0) 
tableView.scrollRectToVisible(CGRectMake(0, 0 - tableView.contentSize.height, cellWidth, tableView.contentSize.height), animated: false) 
관련 문제