gpt4 book ai didi

ios - UITableViewCell 约束更新仅在滚动后发生

转载 作者:行者123 更新时间:2023-12-01 16:07:34 24 4
gpt4 key购买 nike

我遇到了一个烦人的情况。我发现了类似的问题,但答案对我没有帮助,所以我希望能得到一些建议。

我有一个自定义 UITableViewCell ,我在其中使用 .xib 文件。当应用程序加载时,我会获取一些数据,一旦检索到,我会重新加载我的 tableView。单元格显示一张图片和一些标签,我需要标签根据单个单元格中内容的文本宽度调整它们的大小。假设我有这个 cellForRowAt indexPath :

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard
let cell = tableView.dequeueReusableCell(withIdentifier: MyCell.reuseIdentifier, for: indexPath) as? MyCell,
indexPath.row < myDataArray.count
else { return UITableViewCell() }

let dataForCell = myDataArray[indexPath.row]
cell.configure(with: dataForCell)
cell.layoutIfNeeded()
return cell
}

现在在我的 MyCell.swift文件,在 configure(with:) 内方法我设置标签文本,然后我还调用一个名为 setWidths() 的私有(private)方法它使用了我添加到 UILabel 的扩展名在文本设置后返回给我标签的宽度 - 我做了一些基本的计算来调整我想要的标签约束。

我遇到的唯一问题是,当表格 View 最初加载时,标签的宽度没有正确更新,但是当我向下滚动到最初超出框架的单元格时,它们会正确显示,然后当我滚动时备份到最初在框架中且未对齐的单元格,然后它们也会正确显示。

我知道我以前遇到过这样的问题,但通常会调用 layoutIfNeeded()在单元格上解决了这个问题。不是这次。

我知道这与可重用单元格和出列的想法有关,但为什么第一组单元格的布局不遵循相同的规则?这些是用户看到的第一个单元格,我需要它们是正确的!

有人对我有什么建议吗?

编辑

我想我已经解决了这个问题,但是我仍然不知道该怎么做。我必须根据单元格框架的可用情况调整计算出的标签宽度。我添加了一些打印语句来查看单元格宽度是否发生了变化,并且确实如此。里面 setWidths()我添加的方法 print(self.frame.width)当 tableView 首次加载时,它会打印出 325.0对于每个单元格,但是当我滚动并布置新单元格时,它会更改为 414.0 (使用 iPhone 8 Plus 模拟器)。是什么导致单元格的框架宽度从初始布局到重新使用单元格时发生变化?

最佳答案

这里的问题是,当单元格尚未渲染时,您正在计算您的尺寸,更新您的配置方法以获取表格 View 宽度,就像这样 cell.configure(with: DataForCell, width: tableview.frame.width) ,然后使用该宽度来配置您的尺寸,以及为什么它从 375 更改为 414,答案是您正在获取常规 iphone 的宽度,当呈现 View 时它会更改为加号。

关于ios - UITableViewCell 约束更新仅在滚动后发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55387920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com