【问题标题】:UITableView willDisplay cell is drawing all cells before I scroll downUITableView willDisplay 单元格在我向下滚动之前绘制所有单元格
【发布时间】:2018-05-12 01:19:46
【问题描述】:

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

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

无需向下滚动即可输出:

0
1
2
3
4
5

当我向下滚动时,“willDisplay cell”函数正常工作,并且一次打印一个 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;
    }

【问题讨论】:

  • “同时绘制所有单元格”是什么意思?每个单元格都是单独绘制的。
  • 您期望的行为是什么?在我看来,当屏幕加载时,你的表格视图有空间显示 5 个单元格,所以你会得到你提到的控制台输出。
  • 没有屏幕只能放一个单元格
  • 这里看看屏幕如何一次只能容纳一个单元格imgur.com/a/o1VJ9
  • @holex 如果每个单元格在即将出现在屏幕上时都是单独绘制的,为什么控制台输出会同时显示所有索引路径编号而不向下滚动,而屏幕尺寸只能适合单元格

标签: ios swift uitableview


【解决方案1】:

原来我需要设置一个估计的行高。我来自 Android 背景,这对我来说听起来很傻,但它成功了。

postsTableview.estimatedRowHeight = 400
postsTableview.rowHeight = UITableViewAutomaticDimension

【讨论】:

    【解决方案2】:

    关于您编辑的问题:

    iOS 没有任何问题,所有的表格/集合视图单元格都是在显示之前绘制的;想象一个表格视图在显示时一开始什么都没有显示,这会很奇怪吗?

    我不知道你在显示单元格后要达到什么目的,但我相信这适合另一个问题,祝你好运!

    【讨论】:

    • 我不是字面上的意思,我只是说它们是在我向下滚动之前绘制的,即使屏幕一次只能容纳一两个单元格
    • @AhmedElmasry 啊,我明白了,改变你的问题,伙计,你必须准确地说,才能得到准确的答案。
    • 关于您编辑的答案:为什么人们使用 willdisplay cell 方法来实现在 tableview 中的无限滚动? stackoverflow.com/questions/34588837/…
    猜你喜欢
    • 2019-07-20
    • 2011-02-24
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多