2017-11-01 2 views
1

채팅 앱에서 일하고 있는데 처음에는 데이터베이스에서 100 개의 메시지 만 가져옵니다. 사용자가 스크롤 할 때 데이터베이스에서 메시지를 가져 와서 테이블을 다시로드하고 테이블을 다시로드 한 다음 수동으로 내용 오프셋을 설정하여 스크롤 위치를 유지합니다. 스크롤 위치는 정상적으로 작동하지만 tableview 스크롤이 중지되어 사용자가 얼버무 리는 느낌이 들게됩니다. 사용자가 메시지를 가져오고 테이블이 다시로드되었다고 느끼는 것을 원하지 않습니다. 중지 된 스크롤을 다시 시작하는 방법. 사용자가 수동으로 테이블을 스크롤 할 때 UITableView의 panGestureRecognizer 속성을 사용하여 방향과 속도를 얻습니다.UITableView에서 userScrolling을 시뮬레이트하십시오.

답변

0

정확하게 이해하면 테이블보기에서 페이징 메커니즘을 구현하고 싶습니다. 사용자가 스크롤보기의 시작 부분에 도달하면 다음 페이지가 반입되고 이로 인해 재미있는 경험을 할 수 있습니다. 내 제안은 사용자가 스크롤하는 동안 일정한 임계 값에 대해 tableView.contentOffset.y을 테스트하는 것입니다. contentOffset.y이이 임계 값을 초과하면 다음 페이지를 가져옵니다.

UIScrollViewDelegatescrollViewDidScroll(_:) 메서드를 구현하여 contentOffset을 가져 와서 임계 값과 비교할 수 있습니다. 그런 식으로, 데이터는 사용자가 tableView의 끝에 도달하기 전에 (어느 정도까지) 가져올 수 있습니다.

private let fetchThreshold: CGFloat = 80 
func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    if scrollView.contentOffset.y > scrollView.contentSize.height - scrollView.frame.height - fetchThreshold { 
     /* Fetch next page. 
     Remember to lock the process so the data won't be fetched multiple times. Use a boolean... 
     */ 
    } 
} 
+0

예 제대로 작동하는 페이징을 구현했습니다. 문제는 스크롤링이 중지되고 사용자가 다시 스크롤해야한다는 것입니다. –

+0

내 채팅 앱에서이 트릭이 드릴을 수행했습니다 (사용자가 scrollView의 끝에 도달하면 다음 페이지 데이터를 이미 사용할 수 있다는 조건에서). – DanielH

+0

나는 같은 방식으로 구현했다. 사용자가 스크롤을 끝내기 전에 데이터를 프리 페치합니다. 문제는 -setContentOffset뿐입니다. 스크롤 오프셋을 설정하여 스크롤 위치를 복원하면 스크롤이 중지됩니다. –

관련 문제