Swift - 更新 UILabel 文本时 UITableViewCell 跳转

Posted

技术标签:

【中文标题】Swift - 更新 UILabel 文本时 UITableViewCell 跳转【英文标题】:Swift - UITableViewCell jumps when updating UILabel text 【发布时间】:2017-01-31 15:28:45 【问题描述】:

当我像这样更新 UITableViewCell 中的 UILabel 文本时:

self.label.text = "label text"

一切都很好......

但是当我从 Struct Array 更新我的标签文本时,它会导致 UITableView 有时会在向上滚动到顶部时跳跃,而不是在向下滚动时,而是当我向上滚动...

不明白为什么会这样......

结构,正在从我从服务器获得的结果中添加数据

struct ContentStruct 
  var textLink : String? = ""
  var title : String? = ""
  var text : String? = ""

CellForRow

let postData = cellContentArray[(indexPath as NSIndexPath).section]

cell.binData(content: postData)

TableViewCell

 func binData(content: ContentStruct) 
    self.titleLabel.text = content.title
    self.text.text = "yytytytyt"//text
    self.uuidLabel.text = "yhhyhyhyyh"
   

我正在调整单元格的大小,如下所示: 在 ViewDidLoad 中:

tableView.rowHeight = UITableViewAutomaticDimension

然后是这个:

 func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
    let height = self.heightAtIndexPath.object(forKey: indexPath)
    if ((height) != nil) 
        return CGFloat(height as! CGFloat)
     else 
        return UITableViewAutomaticDimension
    


func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) 
    let height = cell.frame.size.height
    self.heightAtIndexPath.setObject(height, forKey: indexPath as NSCopying)

有什么想法吗?

提前致谢!

【问题讨论】:

添加数据源代码 @WetSweater 不知道你的意思是什么?表视图代码?还是结构代码?我正在从我之前从服务器下载的结果中将数据添加到结构中......然后我正在正常更新 tableViewCell......这很奇怪,因为它只发生在底部的第三/第四个单元格上,而不发生在任何其他单元格上。 . 这是一个小闪光,我觉得很讨厌 cellForRow 方法的完整内容将有助于提供建议。你在某处重新加载 tableView 吗? 结构数组...? 添加您的 UITableViewDataSource 和有关单元格布局的信息。会有帮助的 【参考方案1】:

我发现当您的动态单元格高度与您估计的行高不匹配时,就会发生类似的跳跃。最简单的解决方法是固定单元格高度,或者单独计算每个单元格的高度。

【讨论】:

是的,我同意固定单元格高度要容易得多,但在这种情况下,我不能...给我 1 分钟,我将在上面添加我如何调整单元格的大小。 但奇怪的是,如果我用这样的字符串更新标签,跳转不会发生“字符串”....

以上是关于Swift - 更新 UILabel 文本时 UITableViewCell 跳转的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性

UILabel 文本对齐不起作用(Swift 4)

将文本分配给UILabel(iOS,Swift 4,Xcode 9)时内存泄漏

如何在 Swift 中更改 UILabel 的文本属性?

在 Swift 中使用 CoreAnimation 为 UILabel 元素设置动画

从 UITableViewCell 中点击 Swift 更改标签文本颜色