如何防止出队的集合视图单元格相互重叠?
Posted
技术标签:
【中文标题】如何防止出队的集合视图单元格相互重叠?【英文标题】:How to prevent dequeued collection view cells from overlapping each other? 【发布时间】:2017-07-16 06:14:28 【问题描述】:我一直在尝试设置一个集合视图,让用户在其中提交几个字符串,我将这些字符串放入一个数组中,然后通过集合视图的 cellForItemAt 函数回调。但是,每当我在集合视图的顶部添加一行时,它都会在最后一个单元格标签的顶部添加单元格标签,因此 they stack like this。请注意我添加的每个新词如何在渲染中包含所有其他先前的词。
我在 cellForItemAt 的代码是
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InterestsCell", for: indexPath) as? InterestsCell
cell.interestLabel.text = array[indexPath.row]
return cell
else
return UICollectionViewCell()
按下添加按钮时我的代码是
func addTapped()
let interest = interestsField.text
array.insert(interest!, at: 0)
interestsField.text = ""
collectionView.reloadData()
我不确定发生了什么。我到处寻找并尝试使用 prepareForReuse() 但它似乎没有用。后来我尝试通过调用 didSelect 来删除单元格,并且单元格不会再次消失。任何帮助表示赞赏!
This is the code I have in my custom collection view cell implementation in the event that this is causing the error
【问题讨论】:
我建议使用视图调试器来确定问题所在(例如重叠标签、重叠单元格或重叠集合视图)。您知道视图层次结构是什么样的,这将缩小您的研究范围。 @Rob 谢谢 Rob,这让我走上了正轨。出于某种原因,每次我添加一个新字符串时它都会创建一个集合视图的新实例,因此它将每个集合堆叠在一起。 是的,现在您可以追踪添加重复集合视图的位置。但到目前为止,它不在您与我们共享的代码中。祝你好运! 我投票结束这个问题,因为这个问题不包含重现问题所需的代码 【参考方案1】:为此,将这些函数粘贴到您的项目中
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
return 1
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
return 1
你可以玩弄这些值:)
【讨论】:
【参考方案2】:这可以使用 UITableView 轻松实现。所以尝试使用 UITableView 而不是 UICollectionView。
【讨论】:
【参考方案3】:看起来您每次设置文本时都会添加一个新标签。如果你想懒加载 UILabel 你需要添加lazy
lazy var interestLabel: UILabel =
...
()
不过我不会这样做,我会创建对标签的引用
weak var interestLabel: UILabel!
然后在你的 setupViews 方法中添加标签
func setupViews()
...
let interestLabel = UILabel()
...
contentView.addSubview(interestLabel)
self.interestLabel = interestLabel
【讨论】:
以上是关于如何防止出队的集合视图单元格相互重叠?的主要内容,如果未能解决你的问题,请参考以下文章
动态/可出队的 UITableviewcells 内的 UITextfield