我有一个CollectionView,可用来在我的社交应用中显示我的供稿。我现在正尝试在Feed中添加新帖子,效果很好。但是,有时,当添加的单元格占据整个屏幕高度时,不会显示附加到帖子的注释。这是因为我有一个验证,它检查注释是否为空,如果为空,则删除注释textview的子视图并更改约束。看看这张图片,了解我的意思(对不起的质量,我被限制为2 MB):
这是在我的cellForItemAt方法中出错的地方。我有两个数组:posts和userInfo,它们正确地填充了数据,因为如果我在cellForItemAt中打印所有数据,它们都将按预期显示。
echo htmlspecialchars('An example <br>'); // This will print - An example < br >
echo htmlspecialchars('µ †'); // This will print - µ †
我在这里要做的是根据是否有注释来决定是将约束设置为注释还是帖子名称。如果我注释掉此代码,则约束不是(应该是)应有的,而是显示了所有注释。因此,我确定可以在这里找到问题:我的笔记字符串被视为空,而并非如此。打印出数组或print(postNote)返回正确的值。
这是怎么回事,我该如何解决?
答案 0 :(得分:-1)
单元被重用。当以前具有空注释的单元格被重新用于包含非空注释的帖子时,您需要确保正确设置了约束,否则该注释仍将被隐藏。
此外,当单元被重用时,您也不想继续添加约束。您应该在自定义单元格类中一次添加两个约束,然后根据需要将它们设置为活动/不活动。
最后,不要删除noteTextView
,因为再次使用该单元格时,如果有注释,它将不可用。您应该简单地将其设置为isHidden = true
或仅在约束条件下将其隐藏
类似的东西:
socialCell.noteTextView.isHidden = true
socialCell.hideNoteConstraint.isActive = true
socialCell.showNoteConstraint.isActive = false
if let postNote = posts[indexPath.item].postNote, !postNote.isEmpty {
socialCell.noteTextView.isHidden = true
socialCell.hideNoteConstraint.isActive = false
socialCell.showNoteConstraint.isActive = true
}