如何在动画的底部插入UITableViewCell?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在动画的底部插入UITableViewCell?相关的知识,希望对你有一定的参考价值。

我读过https://stackoverflow.com/questions/

并尝试这样:

//UITableView 
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 50;

//Update the full code for the "return" key action
- (void)inputViewDidTapReturn:(MyInputView *)inputView text:(NSString *)text{
    NSLog(@"send text-----%@",text);
    [self.messageManager sendMessageTo:self.sessionID message:text  completion:^(BOOL success, Message *message) {
        if (success) {

            [self.dataArray addObject:message];

            NSIndexPath * bottomIndexPath = [NSIndexPath indexPathForRow:self.dataArray.count-1 inSection:0];

            [self.tableView beginUpdates];
            [self.tableView insertRowsAtIndexPaths:@[bottomIndexPath] withRowAnimation:UITableViewRowAnimationLeft];
            [self.tableView endUpdates];


            [self.tableView scrollToRowAtIndexPath:bottomIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

        } else {
        }
    }];
}

但结果没有正确显示:

enter image description here

它开始从屏幕底部滚动。

UITableViewUITableViewCell都使用自动布局,UITableView已经在键盘的顶部。

任何帮助将不胜感激。

答案

试试这个。

目标C.

[self.dataArray addObject:message];
[self.tableView reloadData];

dispatch_async(dispatch_get_main_queue(), ^{
    NSIndexPath *bottomIndexPath = [NSIndexPath indexPathForRow:self.dataArray.count-1 inSection:0];
    [self.tableView scrollToRowAtIndexPath:bottomIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
});

产量

enter image description here

迅速

self.dataArray.add(messasge)
self.tableView.reloadData()

DispatchQueue.main.async {
    let bottomIndexPath = IndexPath(row: self.dataArray.count-1, section: 0)
    self.tableView.scrollToRow(at: bottomIndexPath, at: .bottom, animated: true)
}
另一答案

正确的方法是使用beginUpdatesendUpdates方法将单元格插入表视图。首先,您应该将项目添加到数组中。

array.append(item)

这不会更新表视图,只更新数组,将单元格添加到视图中只需调用

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

以上是关于如何在动画的底部插入UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 在插入动画完成后立即添加动画

访问现有的 UITableViewCell

UITableViewCell 删除按钮动画

如何将 UITableViewCell 定位在屏幕底部?

启用 isEditing 时,如何使 UITableViewCell 粘在底部?

使用插入动画时,如何防止我的 UITableViewCells 内容与其他单元格重叠?