imageView.layoutMargins = UIEdgeInsets.zero 在 UICollectionViewCell 中没有效果

Posted

技术标签:

【中文标题】imageView.layoutMargins = UIEdgeInsets.zero 在 UICollectionViewCell 中没有效果【英文标题】:imageView.layoutMargins = UIEdgeInsets.zero has no effect in UICollectionViewCell 【发布时间】:2019-08-05 11:39:14 【问题描述】:

我有一些基于我收到的数据类型的配置(要添加到 cell.configure(with item: item) 中的插图,但是这些单元格没有被正确地重用。我正在使用 RxSwift 进行绑定,虽然我没有看到那里的问题。

尝试在prepareForReuse()cell.configure(with: item) 等中设置image.layoutMargins = UIEdgeInsets.zero。似乎不起作用。

    brandsGroup
        .bind(to: rx.items(cellIdentifier: StudioCellConstants.brandReuseIdentifier,
                           cellType: BrandCollectionViewXibCell.self))  (_, item, cell) in
                            cell.configure(with: item)
        .disposed(by: disposeBag)

override func prepareForReuse() 
    super.prepareForReuse()
    image.layoutMargins = UIEdgeInsets.zero

更新:

最终我最终像这样设置了框架,但感觉就像一个 hacky 解决方案。 更好的方法将不胜感激。

                image.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: imageContainerView.frame.width, height: imageContainerView.frame.height)

【问题讨论】:

详细阐述这个语句是什么意思细胞没有被正确地重复使用??他们在做什么,你想达到什么目标?告诉您的确切问题并附上一些您想要什么以及您目前得到什么的屏幕截图? 模型改变时 UIImageView 的 UIEdgeInsets 不会被重置。 (读取 prepareForReuse() 被调用)手动设置 UIEdgeInsets 似乎也不起作用。我不明白为什么...... 在调用 cell.configure(with: item) 之前放置 image.layoutMargins = UIEdgeInsets.zero 或向我们展示 cell.configure 方法 如果您显示配置单元方法,我可以根据您的情况进行详细说明。 【参考方案1】:

你是否正确设置了单元格中imageview的内容填充模式。

//Swift code(I am not familier in rxswift but the concept should be the same)

 let imageView = UIImageView()  
 imageView.contentMode = .scaleAspectFill

我在这里更喜欢scaleAspectFill,因为我假设你需要图像来覆盖整个imageView

【讨论】:

感谢您的回复,但我不明白这与我的问题有什么关系。设置比例没有帮助。我的内容模式是 image.contentMode = .scaleAspectFit. 请检查上面的问题cmets 发生这种情况的方式有很多。但最可能的结果是重用单元格的方式不正确。每次在 cellForRow 中更新模型时,请检查您是否配置了单元格值。祝你好运 是的,我查过了。显而易见的答案不起作用,因此最终出现在 *** 上。

以上是关于imageView.layoutMargins = UIEdgeInsets.zero 在 UICollectionViewCell 中没有效果的主要内容,如果未能解决你的问题,请参考以下文章