Swift - 如何在tableView顶部插入单元格保持偏移和滚动惯性

时间:2018-03-23 04:08:59

标签: ios swift uiscrollview

我使用以下代码更新我的tableView

void motorrun(AF_DCMotor *motor) {
  motor->run(FORWARD);
}

motorrun(&motor1);
motorrun(&motor2);

但是当插入单元格和reloadData()时,滚动惯性将停止。

如何将whatsapp插入顶部以保持偏移并滚动惯性。

This is example

在前5秒,表格很短,当我快速向上滚动并指出时(如安卓滚动状态scroll_state_fling),更多内容插入顶部,同时可以保持偏移和滚动惯性,这太神奇了,我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

为了保持惯性,您需要确保一次调用数据的加载和重新加载。你必须放置一个布尔变量来停止加载多次被触发,比如

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
  <ul class="menu">
    <li><a href="">Home</a></li>
    <li><a href="">Page 1</a></li>
    <li><a href="">Page 2</a>
      <ul class="submenu">
        <li><a href="">Subpage 2a</a></li>
        <li><a href="">Subpage 2b</a></li>
        <li><a href="">Subpage 2c</a></li>
      </ul>
    </li>
    <li><a href="">Page 3</a></li>
  </ul>
</nav>

我发现使用tableView引入更多功能的最佳位置是var isLoadMore = true func scrollViewDidScroll(_ scrollView: UIScrollView) { //Load more cell if tableView.contentOffset.y < 100, self.isLoadMore { self.isLoadMore = false let beforeTableViewContentHeight = tableView.contentSize.height let beforeTableViewOffset = tableView.contentOffset.y let moreDataArray = getAllMessages() for message in moreDataArray.reversed() { dataArray.insert(message, at: 0) } DispatchQueue.main.async { self.tableView.reloadData() self.tableView.layer.layoutIfNeeded() let insertCellHeight = beforeTableViewOffset + (self.tableView.contentSize.height - beforeTableViewContentHeight) let newOffSet = CGPoint(x: 0, y: insertCellHeight) self.tableView.contentOffset = newOffSet self.isLoadMore = true } } } 方法。在此方法中,您可以检查indexPath而不是tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)