2016-07-14 9 views
4

私は下にスクロールする必要があります。私はwhatsappのようなチャットアプリを持っています。だから、ビューが表示されると、テーブルビューに最後の行が表示されます。私はこれに続く行でこれを実現し、うまくいく。テーブルビューとパフォーマンスで下にスクロール

tableView.setContentOffset(CGPointMake(0, CGFloat.max), animated: false) 

また、キーボードが表示されたら、下にスクロールする必要があります。私は自動レイアウトを使用しており、上記の行は機能していません。これを行うには、私は次の行を使用しています:

func scrollToLastRow(animated: Bool) { 
    if self.numberOfRowsInSection(0) > 0 { 
     self.scrollToRowAtIndexPath(NSIndexPath(forRow: self.numberOfRowsInSection(0) - 1, inSection: 0), atScrollPosition: .Bottom, animated: animated) 
    } 
} 

これは、Tableviewの拡張です。

あまりにも多くのメッセージがない場合、この解決策はうまくいきます。それから私は5000のメッセージで試しました(テーブルビューには5000行ありますが、ページングしています)。キーボードが現れたら、CPU使用量は%98-100です。私は2番目のコードはページネーションの問題だと思う、それはRAMへのすべてのメッセージの読み込みを引き起こし、私のアプリはフリーズしてラムの警告を受け取る。

パフォーマンスの問題なしにスクロールする方法を教えてください。

+0

を、あなたは、このための解決策を見つけたことがありますか?また、レルムを使用します。 – oyalhi

答えて

0

ページングがある場合、各ページに20個のメッセージがあると仮定すると、現在のページと最後のページのみを読み込もうとすることができます。この場合、テーブルには40行しかありません。この方法試してください

func scrollToLastRow(animated: Bool) { 
if self.numberOfRowsInSection(0) > 0 { 
    self.scrollToRowAtIndexPath(NSIndexPath(forRow: self.numberOfRowsInSection(0) - 1, inSection: 0), atScrollPosition: .Bottom, animated: animated) 
} 

}

+0

私はレルムを使用しており、自動ページネーションシステムを備えています。だから私はこれをすることはできません。 –

0

:次に、あなたの機能を使用することができます

let delay = 0.1 * Double(NSEC_PER_SEC) 
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) 

    dispatch_after(time, dispatch_get_main_queue(), { 

      let numberOfSections = self.tableView.numberOfSections 
      let numberOfRows = self.tableView.numberOfRowsInSection(numberOfSections-1) 
      if numberOfRows > 0 { 
       let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: (numberOfSections-1)) 
       self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true) 
      } 
    }) 
+0

いいえ、それは同じです。 –

関連する問題