从底部加载tableview,向上滚动(反向tableview)(iOS)

Jos*_*nor 10 uitableview ios swift

我想向后加载我的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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Jos*_*nor 47

最好的方法是翻转tableView和它的单元格.这样,如果一个单元格要改变大小(由于异步下载之类的东西),你仍然会从tableview的底部加载而不是偏移.

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

//In cellForRowAtIndexPath
cell.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));
Run Code Online (Sandbox Code Playgroud)

另外:如果你有一个headerView,只需将其设置为tableView.tableFooterView:

var tableHeaderView = UIView(frame: headerFrame)
tableHeaderView.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi));
conversationTableView.tableFooterView = tableHeaderView
Run Code Online (Sandbox Code Playgroud)

如果你有一个footerView和headerView,只需将标题设置为页脚,将页脚设置为标题.

编辑:如果要翻转滚动指示器:

conversationTableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, conversationTableView.bounds.size.width - 8.0)
Run Code Online (Sandbox Code Playgroud)

  • 只是疯狂的苹果没有本地方法来做到这一点。 (3认同)
  • 聪明而有创意的解决方案!对我来说效果非常好。我注意到的一件事是滚动条现在将出现在屏幕的左侧而不是右侧。为了解决这个问题,我调整了conversationTableView.scrollIndicatorInsets。也许值得将其添加到答案中?即conversationTableView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0,0.0,0.0,conversationTableView.bounds.size.width - 8.0) (2认同)
  • 知道如何让scrollsToTop 行为与转换一起正常工作吗?现在,点击状态栏将导致视图向下滚动,而不是向上滚动,这是非常规且违反直觉的。 (2认同)