2017-03-15 3 views
0

채팅 응용 프로그램을 구축 중입니다. 나는 UTableView을 사용하여 채팅 상자를 구성합니다. 채팅 상자 화면을로드 할 때 마지막 읽지 않은 메시지의 인덱스 경로로 tableview를 스크롤해야합니다. 나는 이렇게하려면 scrollToRowAtIndexPath 방법을 사용하고있다. 이 경우 indexPath 0의 모든 셀에 대해 cellForRowIndexPath이 호출됩니다. 이는 응용 프로그램 성능에 심각한 영향을줍니다. 셀 높이에 자동 치수를 사용하고 있으므로 setContentOffset 메서드도 사용할 수 없습니다.UITableView의 보이는 (마지막) 셀만 다시로드하는 방법?

중간 셀을로드하지 않고 필요한 indexPath로 tableview를 스크롤하는 다른 방법이 있습니까?

답변

0
self.tblView.reloadData() 
// First figure out how many sections there are 
    let lastSectionIndex = self.tblView!.numberOfSections - 1 

// Then grab the number of rows in the last section 
    let lastRowIndex = self.tblView!.numberOfRowsInSection(lastSectionIndex) - 1 

// Now just construct the index path 
    let pathToLastRow = NSIndexPath(forRow: lastRowIndex, inSection: lastSectionIndex) 

// Make the last row visible 
    self.tblView?.scrollToRowAtIndexPath(pathToLastRow, atScrollPosition: UITableViewScrollPosition.None, animated: false) 
+0

동일한 논리를 사용하고 있습니다. 그러나 scrollToRowAtIndexPath는 최종 셀에 도달하기 전에 모든 중간 셀 (0부터)을로드합니다. – Advaith

0

나는 원하는 동작을 얻을 수있는 2 가지 방법을 생각할 수 있습니다. 와 scrollToRowAtIndexPath 사용

  1. setContentOffset 계산 높이 방법을 사용 = 거짓
  2. 애니메이션. 실제로 셀의 높이를 계산해야합니다.
관련 문제