2013-08-03 2 views
1

게임에서 재생 가능한 라운드를 나타내는 UITableView가 있습니다. 첫 번째 실행에서는 tableView에 두 개의 셀만 표시됩니다. 사용자가 레벨을 이기게되면 점점 더 많은 행이 tableView에 추가됩니다. tableView가 표시 될 때마다 reloadData가 발생합니다 (사용자가 레벨을 때릴 때마다 발생).iOS UITableView가 셀 추가 후 스크롤되지 않습니다.

일단 tableView에 스크롤이 필요한 셀이 충분하면 tableView가 스크롤되지 않고 사용자가 왼쪽으로 이동합니다. 사용자가 손가락을 떼면 tableView가 다시 튀어 나와 사용자가 스크롤해야 볼 수있는 셀과 상호 작용할 수 없습니다. 다른 레벨을 완료하고 다시 tableView로 돌아 가면 뷰가 제대로 스크롤됩니다.

스크롤 문제가있을 때, 그것은 tableView가 스크롤을 요구하기에 충분하다는 것을 알지 못하는 것처럼 보이므로 아래에 표시되는 셀이 있음에도 불구하고 원래 위치로 되돌아옵니다. 사용자가 스크롤하려고 시도합니다.

나는 tableView의 델리게이트에 heightForRowAtIndexPath 또는 heightForHeaderInSection 메서드를 구현하지 않으므로 방해해서는 안됩니다. 이 사이트와 Google에서 유사한 문제를 검색했으며 contentSize 설정 등 몇 가지 시도를했지만 실패했습니다.

스크롤이 부족한 이유는 무엇입니까? 또는 더 중요한 것은 그것을 고칠 수있는 방법이 있습니까? 감사!

편집 : 프레임에 대해 몇 가지 의견을 묻습니다. 테이블이있는보기의 프레임, tableView 자체의 프레임 및 테이블의 viewDidAppear 메서드에서 tableView의 콘텐츠 크기를 기록했습니다.

다음은보기가 시간이 나타날 때의 결과입니다. 스크롤링이 필요합니다. 스크롤 동작은 예상대로입니다. 사용자는 보이는 영역을지나 스크롤 할 수 있으며 되돌아옵니다.

view.frame: {{0, 20}, {320, 460}} 
tableView.frame: {{0, 145}, {320, 315}} 
tableView.contentSize: {320, 308} 

다음은 스크롤링이 필요할 때의보기입니다. 스크롤하면 아래의 셀을 표시 할 수 있지만 사용자가 손가락을 떼면 안되면 다시 튀게됩니다. 새로운 셀이 추가 된 후에는이 있어야로 contentSize.height는, (44)에 의해 변화 한 것을

view.frame: {{0, 20}, {320, 460}} 
tableView.frame: {{0, 145}, {320, 315}} 
tableView.contentSize: {320, 352} 

참고. contentSize.height는 이제 tableView.frame.height보다 크지 만 스크롤하는 비헤이비어는이를 반영하지 않습니다.

+1

일부 코드를 게시하십시오. 당신은 어딘가에 tableview의 프레임을 편집하고 있습니까? 또는 tableView의 contentInset을 사용하고 계십니까? –

+0

자동 레이아웃을 사용 중이며 프레임을 설정하지 않았습니다. tableView의 contentInset을 설정하지 않습니다. 나는 코드에서 특별한 일이 일어나고 있다고 생각하지 않는다. 또는 내가 게시 할 수있는 코드가 유용 할 것이라고 생각한다. 정상적인 대리자 메서드를 구현하고 있습니다. IB에서 tableView를 레이아웃 중입니다. 이러한 스크롤링 문제를 야기 할 수있는 IB 제한 사항을 상상할 수는 없습니다. – tjf

+0

코드를 게시하십시오 - 다른 사람이 귀하의 질문에 대한 의미있는 답변을 제공하는 것은 거의 불가능합니다. – NSTJ

답변

-1
self.tableview.scrollEnable=YES;//Paste this line where initialized UITableView. 
+0

OP가 약간의 스크롤링을 받고 충분하지 않기 때문에 이것은 분명히 잘못되었습니다. – rdelmar

+0

그런 다음 문제가 UITableView 프레임이어야합니다. 뷰보다 커야합니다. 일부 셀이 표시되지 않는 이유입니다. 따라서 UITableView의 프레임을 올바르게 설정해야합니다. –

+0

@ h.kishan 답변 주셔서 감사합니다. 나는이 기회를 포기했지만 효과가 없었다. 또한 UITableView의 프레임을 질문에 대한 편집에 기록했습니다. – tjf

0

프로토콜 UITableViewDelegate 그래서 당신이해야 할 모든 방법을 구현하는 것입니다, UIScrollViewDelegate을 준수 -scrollViewWillBeginDragging와 구현 클래스에 대리인으로 설정되어있는 경우 그들은 자동으로 호출됩니다 -scrollViewDidScroll 직접 UITableViewDelegate 구현과 귀하의 UITableView.

그래서 이러한 방법으로 tableView의 내용을 표시하는 것과 관련된 로직을 구현할 수 있습니다. 스크롤하는 동안 새 셀이 표시되어야한다고 말한 것입니다. 즉, 최상위 셀이 그 시간에 숨겨야합니다.당신은

//set your content of tableview to show new cell each time. 

또는 스크롤 방향에 대한

, 당신은 방법이, 위와 같은 방법으로 논리를 쓸 수 - (무효) scrollViewDidEndDecelerating :
// you can set here start and end coordinates and change them accordingly when scroll decelerates. 

같은 방법으로 코드를 작성, (있는 UIScrollView *)있는 ScrollView을 것이다 스크롤이 뒤로 튀지 않도록하십시오. 그리고 당신은 완벽한 결과를 얻을 것입니다. 희망이 도움이됩니다.

관련 문제