意外的uicollectionview细胞改组

时间:2017-07-12 21:46:01

标签: ios swift uiimageview uicollectionview uicollectionviewcell

我有一个轻微的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()
    }
}

我怀疑在重新加载过程中,单元格的混乱会导致逻辑错位,但到目前为止我找不到任何解决方案。提前感谢您,期待听到精彩的社区!

0 个答案:

没有答案