iOS12 UICollectionView будет отображать ячейку, отображаемую на всех ячейках - PullRequest
0 голосов
/ 22 октября 2018

Мои клавиатурные расширения, состоящие из UICollectionView из UIImages, продолжают зависать на iOS12 после превышения 53 МБ ОЗУ

collectionView:willDisplay cell вызывается во всех ячейках, независимо от того, отображаются они

ПРИМЕЧАНИЕ: didEndDisplaying никогда не вызывается

func collectionView(_ collectionView: UICollectionView, willDisplay c: UICollectionViewCell, forItemAt indexPath: IndexPath)

Могу ли я вернуть поведение collectionView:willDisplay, поэтому оно вызывается только тогда, когда ячейка действительно отображается?

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell: EmojiCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "EmojiCollectionViewCell", for: indexPath) as! EmojiCollectionViewCell
    return cell

}

func collectionView(_ collectionView: UICollectionView, willDisplay c: UICollectionViewCell, forItemAt indexPath: IndexPath) {

    let cell = c as! EmojiCollectionViewCell

    let imageName = String(format:"%@-%@", categories[selectedCategory], NSNumber(value: indexPath.row + 1));
    let emojiImage = UIImage(named: imageName)

    cell.setupWithEmojiImage(image: emojiImage)

}

func collectionView(_ collectionView: UICollectionView, didEndDisplaying c: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    let cell = c as! EmojiCollectionViewCell
    cell.setupWithEmojiImage(image: nil)

}

1 Ответ

0 голосов
/ 22 октября 2018

вы, вероятно, вызываете reloadData () или что-то в методе источника данных tableview, вызывая бесконечный цикл.какой код в setupWithEmojiImage(image: nil)?Я думаю, что вы должны поместить в cellForRow вместо willDisplay следующее:

let imageName = String(format:"%@-%@", categories[selectedCategory], NSNumber(value: indexPath.row + 1));
let emojiImage = UIImage(named: imageName)
cell.setupWithEmojiImage(image: emojiImage)

Также избегайте использования оператора взрыва (!) Для принудительного развертывания, это приводит к сбою, если объект не существует.Сделайте это:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    if let cell: EmojiCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "EmojiCollectionViewCell", for: indexPath) as? EmojiCollectionViewCell {
        return cell
    }

    return UITableViewCell()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...