如何防止出列的集合视图单元格相互重叠?

时间:2017-07-16 06:14:29

标签: ios swift uicollectionview

我一直在尝试设置一个集合视图,我让用户提交了几个字符串,我将其放入数组并通过集合视图的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

4 个答案:

答案 0 :(得分: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
}

你可以玩弄值:)

答案 1 :(得分:0)

使用UITableView可以轻松实现。因此,请尝试使用UITableView而不是UICollectionView。

答案 2 :(得分:0)

我多次遇到同样的问题。大多数时候,添加"配置"代码到UICollectionViewCell就可以了。也许移动你的" interestField.text"和您的单元格的任何其他配置将解决问题。我有时会得到那些重叠或错误的配置。希望它有所帮助

答案 3 :(得分:0)

每次设置文本时,您似乎都在添加新标签。如果您想懒洋洋地加载UILabel,则需要添加lazy

lazy var interestLabel: UILabel = {
  ...
}()

我不会这样做,我会创建对标签的引用

weak var interestLabel: UILabel!

然后在setupViews方法中添加标签

func setupViews() {
    ...
    let interestLabel = UILabel()
    ...
    contentView.addSubview(interestLabel)
    self.interestLabel = interestLabel
}