Swift 应该改变单元格配置的条件不起作用,可能是因为提要是如何填充的

Swift 应该改变单元格配置的条件不起作用,可能是因为提要是如何填充的,swift,uicollectionview,Swift,Uicollectionview,我使用的是XCode 9,并且我已经以编程方式创建了一个集合视图。我有一个名为populateFeedCollectionViewCell的函数,我使用从服务器获得的数据填充集合视图的每个单元格。我把这项功能称为手机功能 在我的populateFeedCollectionViewCell函数中,我检查项目是否有非的图像,当它没有图像时,我通过改变其约束告诉图像视图为第1,1帧 由于某些原因,这不能正常工作。所有应该更改的项目都成功地进行了更改,但其他项目也在进行更改(只是其中的一部分) 当xco

我使用的是XCode 9,并且我已经以编程方式创建了一个集合视图。我有一个名为populateFeedCollectionViewCell的函数,我使用从服务器获得的数据填充集合视图的每个单元格。我把这项功能称为手机功能

在我的populateFeedCollectionViewCell函数中,我检查项目是否有非的图像,当它没有图像时,我通过改变其约束告诉图像视图为第1,1帧

由于某些原因,这不能正常工作。所有应该更改的项目都成功地进行了更改,但其他项目也在进行更改(只是其中的一部分)

当xcode进入我修改约束的条件时,我会让它将项目打印给我,奇怪的是,项目没有被打印(因此没有错误地进入条件),而是在修改它的约束

我的猜测是,当调用item的override单元格时,它会弄错索引或其他内容。但我不知道如何确定这是问题所在,也不知道如何解决它

这是我的密码:

我调用populateFeedCollectionViewCell的地方

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! CustomFeedCell
    presenter.populateFeedCollectionViewCell(cell: cell, item: itemArray[indexPath.row])
    cell.shareButton.tag = indexPath.row
    cell.delateButton.tag = indexPath.row
    return cell
}
在populateFeedCollectionViewCell中,我给出了条件:

    if item.mediaUrl == "empty"{
        debugPrint("entrou em empty", "media url:", item.mediaUrl, "title:", item.title)
        cell.feedImageView.heightAnchor.constraint(equalToConstant: 206.0).isActive = false
        cell.feedImageView.widthAnchor.constraint(equalToConstant: 341.0).isActive = false
        cell.feedImageView.widthAnchor.constraint(equalToConstant: 1).isActive = true
        cell.feedImageView.heightAnchor.constraint(equalToConstant: 1).isActive = true

    } else {
        cell.feedImageView.widthAnchor.constraint(equalToConstant: 1).isActive = false
        cell.feedImageView.heightAnchor.constraint(equalToConstant: 1).isActive = false
        cell.feedImageView.heightAnchor.constraint(equalToConstant: 206.0).isActive = true
        cell.feedImageView.widthAnchor.constraint(equalToConstant: 341.0).isActive = true
    }
我的提要上的结果: 注:请注意,当它没有图像时,它是正确的,但当您将图像视为文本顶部的一条线时,这些约束是在不应该应用的情况下应用的。另外,当我滚动提要时,其他项会以错误的方式更改其约束


由于在
cellForItemAt
中有单元格正在恢复,因此每次重新使用单元格时,它都会创建其他冲突的约束,然后导致意外结果,在创建新约束之前,您需要清除
feedImageView
中的所有约束

或者最好在xib/自定义类中创建约束,然后将它们作为出口挂钩并使用这些常量

if item.mediaUrl == "empty"{       
    cell.feedImageViewWidth.constant = 1.0
    cell.feedImageViewheight.constant = 1.0
} else {
    cell.feedImageViewWidth.constant = 341.0
    cell.feedImageViewheight.constant = 206.0
}
在哪里

var feedImageViewWidth:NSLayoutConstraint! // or @IBOulet weak var .....
var feedImageViewheight:NSLayoutConstraint!
警告:

不要用约束来思考问题

.isActive=false

停用旧的约束,不,它们会添加另一个停用的约束


谢谢,我没有使用xib,所以我通过设置条件来解决了这个问题,我首先将约束条件赋予cell,而不是替换它们,它似乎可以工作!谢谢你的警告!这澄清了很多:D