2016-07-11 2 views
0

Я создаю интерфейс чата с помощью UITableView. Я добавление клеток с использованием коды нижеКак добавить последнюю строку в UITableView с плавной прокруткой?

self.tableView.beginUpdates() 
self.tableView.insertRows(at: [IndexPath(row: self.messageCards.count - 1, section: 0)], with: .bottom) 
    self.tableView.endUpdates() 

и после добавления я использую scrollToRowAtIndexPath, чтобы показать последнюю вставленную строку.

let indexPath = IndexPath(row: self.messageCards.count - 1, section: 0) 
self.tableView.scrollToRow(at: indexPath, at: .bottom, animated: false) 

но в конце обе анимации смешиваются и прокручиваются, не происходит гладко.

+0

Какой должна быть требуемая последовательность анимация .. –

+0

@RohitKP сначала я хочу прокручивать вверх и хочу показывать новое сообщение с помощью анимации –

ответ

0

Вы можете попробовать это, я проверил код:

arrayData.addObject(str) 
    let indexpath = NSIndexPath(forRow: arrayData.count-1, inSection: 0) 

    tblView.insertRowsAtIndexPaths([indexpath], withRowAnimation: UITableViewRowAnimation.Automatic) 
    tblView.scrollToRowAtIndexPath(indexpath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true) 

После выводится: дайте мне знать, если вы хотите полный исходный код.

enter image description here

0

Пожалуйста, проверьте это.

[UITableView animateWithDuration:5.0 delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
     [self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:self.messageCards.count-1 inSection:0]] withRowAnimation:UITableViewRowAnimationFade]; 
    } completion:^(BOOL finished) { 
     NSLog(@"animated"); 
     [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathWithIndex:self.messageCards.count-1] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 
    }]; 
0
You can implement below code. its working fine. 

[self.messageCards addObject:@"DATA Whatever you want"]; 
[self.tableView reloadData]; 
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.messageCards.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 
0

Его удивительно, но для достижения гладкой, добавив при прокрутке просто нужно позвонить reloadData()

func fetchNext(_ countToFetch: Int? = 10) { 

    let existingCount = items?.count ?? 0 

    networkService?.items(bySkip: existingCount, take: countToFetch, completion: { (data, error) in 

     if let newItems = data?.items() as? [Element], newItems.count > 0 { 
      self.items?.append(contentsOf: newItems) 
      self.refreshCallback?() 
     } 
    }) 
} 

Обратный вызов:

datasource?.refreshCallback = { [weak self] in 

    if #available(iOS 10.0, *) { 
     self?.table.refreshControl?.endRefreshing() 
    } 
    self?.table.reloadData() 
} 
Смежные вопросы