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

时间:2017-04-18 19:44:18

标签: ios swift uitableview

我想向后加载我的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并向上滚动以查看更多内容?

2 个答案:

答案 0 :(得分:39)

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

//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)

答案 1 :(得分:1)

@Validateable class MyCommand { String cancel_url String redirect_url String success_url static constraints = { cancel_url nullable: false, validator: { url, obj -> //some specific validation //some common url validation } redirect_url nullable: false, validator: { url, obj -> //some specific validation //some common url validation } success_url nullable: false, validator: { url, obj -> //some specific validation //some common url validation } } } 方法中,执行以下操作:

viewWillAppear

其中tableView.scrollToRowAtIndexPath(bottomIndexPath, atScrollPosition: .Bottom, animated: true) 是表视图中最后一行的indexPath。如果您的数组长度为bottomIndexPath且表格中只有一个部分,则通常为n,但请务必检查您的具体IndexPath(item: n-1, section: 0)

这将确保您从tableView的底部开始。完成后,您需要做的就是确保UITableView上的cellForRowAtIndexPath方法反向返回数据,然后您就能获得所需效果。