我有一个轻微的UI错误我无法解决。
Scenario:
我有3个水平视频缩略图。中间的那个有一个锁定图标,表示“只有在订阅时才能观看”。其他缩略图没有锁定图标,因为它们可以自由观看。登录或退出时,我注意到3个缩略图一瞬间洗牌。然后他们又回到预定的位置,但现在第3个视频有一个锁定图标。如果我再说一遍,第一个就有一个锁定图标。
当用户登录或退出并且我们重新加载数据时,Notification Center
帖子会发出警告:
func reloadCollection() {
// reload data
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let section = self.sections[indexPath.section]
let data = section.items[self.isInfinityScrolling ? (indexPath.row % self.sections[indexPath.section].items.count) : indexPath.row]
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCell", for: indexPath) as! ImageCell
cell.configWithItem(data)
return cell
}
func configWithItem(_ item: CollectionLabeledItem) {
// get images, titles, etc
if item.lockStyle != nil {
self.lockStyle = item.lockStyle!
}
// nil = empty || no lock icon
// lockStyle = locked or unlocked
}
当我断开我的reloadCollection()时,它调用的方法正常工作:
if video.subscriptionRequired {
if isLoggedIn() {
self.lockStyle = .unlocked
}
else {
self.lockStyle = .locked
}
}
我也在使用prepareForReuse:
var prepareForReuseCallback: (() -> Void)!
func prepareForReuse(){
if self.prepareForReuseCallback != nil {
self.prepareForReuseCallback()
}
}
我怀疑在重新加载过程中,单元格的混乱会导致逻辑错位,但到目前为止我找不到任何解决方案。提前感谢您,期待听到精彩的社区!