我想向后加载tableview,这意味着tableView从底部加载并向上滚动以查看更多内容。

首先,我尝试反转dataSource数组。内容颠倒了,但是仍然从顶部开始加载,用户必须向下滚动才能看到更多内容。

然后,我尝试从viewWillAppear的底部加载tableView:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if (self.conversationTableView.contentSize.height > self.conversationTableView.frame.size.height) {
        let offset = CGPoint(x: CGFloat(0), y: CGFloat(self.conversationTableView.contentSize.height - self.conversationTableView.frame.size.height))
        self.conversationTableView.setContentOffset(offset, animated: true)
    }
}

但是,此尝试不起作用,因为我正在异步下载图像(我使用的是NSTextAttachment,它填充了每个单元格中的UITextView)。每当我的占位符替换为实际下载的图像时,它将导致tableView内容偏移发生偏移(占位符的图像高度几乎总是小于下载的图像的高度)。因此,以这种方式设置contentOffset无效。

如何从底部加载tableView并向上滚动以查看更多内容?

最佳答案

最好的方法是翻转tableView及其单元格。这样,如果单元格要更改大小(由于异步下载之类的原因),您仍然将从表 View 的底部加载而不是从偏移处加载。

//In ViewDidLoad
conversationTableView.transform = CGAffineTransform(rotationAngle: -(CGFloat)(Double.pi));

//In cellForRowAtIndexPath
cell.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));

另外:如果您具有headerView,只需将其设置为tableView.tableFooterView:
var tableHeaderView = UIView(frame: headerFrame)
tableHeaderView.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));
conversationTableView.tableFooterView = tableHeaderView

如果您有footerView和headerView,只需将页眉设置为页脚,将页脚设置为页眉。

编辑:
如果要翻转滚动指示器:
conversationTableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, conversationTableView.bounds.size.width - 8.0)

关于ios - 从底部加载tableview,向上滚动(反向tableview)(iOS),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43480887/

10-14 23:28
查看更多