使用自动布局时无法隐藏或删除 UICollectionViewCell 中的视图
Posted
技术标签:
【中文标题】使用自动布局时无法隐藏或删除 UICollectionViewCell 中的视图【英文标题】:Unable to hide or remove views in UICollectionViewCell when using Autolayout 【发布时间】:2015-04-03 07:33:07 【问题描述】:我在 UICollectionViewCell 中有一个 UIImageView(我们称它为 myImageView),它具有必要的约束。我正在使用故事板并将视图和代码与viewWithTag
链接起来。
在 cellForItemAtIndexPath 中,有一个条件,例如:
if (1 + 1 == 2)
myImageView.hidden = YES;
else
myImageView.hidden = NO
我已设置断点并验证代码已执行,但 myImageView 对于第一批可见单元格没有隐藏(假设所有单元格都满足条件)。 p>
当我向下滚动以显示新的(或重用的)单元格时,一切都按预期工作(满足条件并假定隐藏的单元格被隐藏,反之亦然)。当我向上滚动以再次显示第一批单元格时,它也可以正常工作。
问题仅在于第一批可见单元格。
我尝试过removeFromSuperview
,而不是隐藏单元格,但在那里也没有运气。
在这种情况下使用自动布局和 UICollectionViews 时是否有适当的方法或最佳实践?
【问题讨论】:
第一次调用cellForItemAtIndexPath
之前条件是否为真?在第一个单元格已经显示并且您还没有调用 reloadData 之后,这听起来就像是真的
@Paulw11 我通过 API 检索数据。从 API 中检索到的是字典数组,隐藏该图像视图的条件在该字典中。从 API 成功检索数据后,我调用 reloadData。无论图像视图最初是否隐藏,它都应该根据 if else 条件相应地更新,因为我满足了这两种情况,对吗?
应该的。您使用视图标签而不是带有 IBOutlets 的自定义单元类是否有特殊原因?
@Paulw11 没有特别的原因。我尝试为此创建 UICollectionViewCell 的子类,但得到了相同的结果。无论哪种方式,代码在满足或不满足隐藏条件时仍会进入正确的隐藏或取消隐藏块。不过,我有一个观察结果,如果我在情节提要中检查 imageview 的隐藏框,会发生同样的事情,但相反;对于第一批隐藏单元格,应该显示的图像视图是隐藏的。
约束不应该与.hidden
有任何关系
【参考方案1】:
由于我们不能为约束设置标签,我们别无选择,只能继承 UICollectionViewCell 并将约束链接到 IBOutlet。
然后在cellForRowAtIndexPath
:
cell.imageViewHeightConstraint.constant = imageViewShouldHide ? 0 : cell.imageView.image.size.height;
简单地说,在 n 值和 0 之间切换视图的高度约束,而不是在 YES 和 NO 之间隐藏.
在采用自动布局时,我了解到我们应该停止考虑框架和矩形,但我不确定隐藏视图。感谢@Paulw11 的提示!
【讨论】:
以上是关于使用自动布局时无法隐藏或删除 UICollectionViewCell 中的视图的主要内容,如果未能解决你的问题,请参考以下文章