2017-01-22 25 views
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をリロードする前に、現在のスクロール位置を取得します。そのプロパティ/値は、行がすべて同じ高さかどうかによって異なります。そのため、2つの方法があります。 tableViewを再読み込みした後。それが範囲内にある限り、その位置にスクロールバックします。 [スクロール位置の取得](http://stackoverflow.com/questions/2795900/how-can-i-get-the-uitableview-scroll-position-so-i-can-save-it)を参照してください。 – Jay

答えて

0

(つまりのUITableViewによって実装されている)あなたは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

は最後のインデックスにあなたのテーブルビューをスクロールしてください。

let lastCellIndexPath = NSIndexPath(forRow: yourArray.count-1, inSection: 0) 
self.tableView.scrollToRowAtIndexPath(lastCellIndexPath, atScrollPosition: .Bottom, animated: false) 
関連する問題