0

채팅 응용 프로그램을 Firebase로 빌드하고 reloadData()가 맨 위로 스크롤 한 후 문제가 있습니다.스크롤 사용 안 함

어떻게 비활성화 할 수 있습니까?

있는 UIScrollView 클래스로이 내 코드

func retrieveDataFromFirebase(){ 
    FIRDatabase.database().reference().child("share").child("post").observe(.value) { (snapshot:FIRDataSnapshot) in 
     if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot]{ 
      self.key.removeAll() 
      self.users.removeAll() 
      for snap in snapshots{ 
       self.key.append(snap.key) 
       if let dic = snap.value as? [String:AnyObject]{ 
        let msg = Message() 
        msg.setValuesForKeys(dic) 
        self.users.append(msg) 
       } 

      } 
      DispatchQueue.main.async { 
       self.tableView.reloadData() 
      } 
     } 
    } 
} 
+1

먼저 필요없는 DispatchQueue를 제거하십시오. 둘째, tableView를 다시로드하기 전에 현재 스크롤 위치를 가져옵니다. 이 속성/값은 행이 모두 같은 높이인지 아닌지에 따라 달라 지므로 두 가지 방법이 있습니다. tableView를 다시로드 한 후. 여전히 범위 내에있는 한 해당 위치로 다시 스크롤하십시오. [스크롤 위치 가져 오기] (http://stackoverflow.com/questions/2795900/how-can-i-get-the-uitableview-scroll-position-so-i-can- save-it)를 참조하십시오. – Jay

답변

0

(즉, jQuery과에 의해 구현되는) 당신이 scrollsToTop 변수가 있습니다.

false으로 설정하십시오.

또는 데이터를 다시로드 할 때 스크롤을 맨 위 거부하는 대리인을 만들어야합니다.

참고 문헌 : https://developer.apple.com/reference/uikit/uiscrollview https://developer.apple.com/reference/uikit/uiscrollview/1619421-scrollstotop

https://developer.apple.com/reference/uikit/uiscrollviewdelegate/1619378-scrollviewshouldscrolltotop

0

는 마지막 인덱스에있는 tableview를 스크롤하십시오.

let lastCellIndexPath = NSIndexPath(forRow: yourArray.count-1, inSection: 0) 
self.tableView.scrollToRowAtIndexPath(lastCellIndexPath, atScrollPosition: .Bottom, animated: false)