在我向下滚动之前,UITableView willDisplay单元格正在绘制所有单元格

时间:2017-11-28 14:30:49

标签: ios swift uitableview

我正在尝试通过检查“willDisplay单元格”中的索引路径在UITableView中实现无限滚动,但是一旦表格加载了数据,“willDisplay单元格”func似乎在我向下滚动之前绘制所有单元格,尽管移动屏幕一次只能容纳一个或两个小区。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        print(indexPath.row)
}

输出而不向下滚动:

0
1
2
3
4
5

当我向下滚动“willDisplay单元格”时,func工作正常并且一次打印一个indexpath.row。

这可能是什么问题?

以下是完整代码:

override func viewDidLoad() {
        super.viewDidLoad()
        postsTableview.delegate = self
        postsTableview.dataSource = self
        let nibName = UINib(nibName: "postTableViewCell", bundle:nil)
        postsTableview.register(nibName, forCellReuseIdentifier: "postTableViewCell")

        loadPosts()           
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return posts.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "postTableViewCell", for: indexPath) as! postTableViewCell
        return cell
    }

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        print(indexPath.row)
}

我尝试将tableview单元格高度设置为固定的值超过屏幕高度,但我仍然遇到同样的问题

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat{
        return 1000.0;
    }

2 个答案:

答案 0 :(得分:1)

事实证明我需要设置估计的行高。我来自Android背景,这对我来说听起来很傻,但结果却很明显。

postsTableview.estimatedRowHeight = 400
postsTableview.rowHeight = UITableViewAutomaticDimension

答案 1 :(得分:0)

  

在您编辑的问题上:

iOS没有任何问题,所有表格/集合视图单元格在显示之前都会被绘制出来;想象一下表格视图在开头显示时没有显示任何内容,这会不会很奇怪?

我不知道你在细胞展示后想要达到的目标,但我相信这适合另一个问题,祝你好运!