gpt4 book ai didi

ios - dequeueReusableCell 导致新单元格使用旧样式?

转载 作者:行者123 更新时间:2023-11-28 07:04:30 32 4
gpt4 key购买 nike

我有一个 tableView 是这样设置的:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as! CommentCell

let row = indexPath.row
let cellComment = Comments[row]

// Remove serperator
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None

// Set comment content
cell.commentText.text = Comments[row].content

// Set level indicator
var width = CGFloat(Comments[row].level * 5)
let widthConstraint = NSLayoutConstraint(item: cell.levelIndicator, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: width)
cell.levelIndicator.addConstraint(widthConstraint)

return cell
}

Comments 是一组 Comment 结构,并设置 commentText TextView 作为 Comment[row].content 按计划工作。

我的问题出现在单元格的级别指示器部分。我正在调整单元格左侧的 View ,该 View 会根据某个评论在评论树中的下层展开。

当第一次加载评论时,请看like this

如您所见,左侧的橙色 View 正确增加,一切看起来都很棒。一旦向下滚动,事情就会开始 fall apart

根据我在网上的研究,我了解到该表正在重用单元格以提高性能。这些重复使用的单元格可以很好地更改文本属性,但它们会保留级别指示器的宽度。一旦开始上下滚动,单元格就会变得一团糟。

我不确定如何在重复使用单元格时清除之前的宽度。有什么想法吗?

最佳答案

每次准备好单元格时,您都会添加一个新的宽度约束。

let widthConstraint = NSLayoutConstraint(item: cell.levelIndicator, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: width)
cell.levelIndicator.addConstraint(widthConstraint)

要么在添加新的之前删除旧的,要么在 IB 中创建一次,为其设置一个导出并修改其 constant 属性,将上面的代码替换为以下代码:

var width = CGFloat(Comments[row].level * 5)
widthConstraint.constant = width

假设您的 socket 名称是widthConstraint

关于ios - dequeueReusableCell 导致新单元格使用旧样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31130724/

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