如何通过平滑滚动将最后一行添加到UITableView?

时间:2016-07-11 10:09:09

标签: ios swift uitableview uiscrollview

我正在使用UITableView构建聊天界面。我使用以下代码添加单元格

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

并使用scrollToRowAtIndexPath添加i&#m;以显示最后插入的行。

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

但最后两个动画混合和滚动都没有顺利进行。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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];
    }];

答案 2 :(得分: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];

答案 3 :(得分: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()
}