Почему UICollectionView перестает работать, когда NSMutableAttributedString установлен в одну из своих ячеек - PullRequest
0 голосов
/ 22 января 2020

Я наткнулся на особую проблему в моем текущем проекте.

У нас есть UICollectionView с использованием пользовательского макета с именем SquareMosaicLayout . В этом представлении коллекции первая ячейка, представляющая UITextView.

В этом текстовом представлении снова должен отображаться текст html, созданный с помощью:

NSMutableAttributedString(fromHTMLString: htmlString, textColor: textColor, font: font)

Сейчас когда эта строка назначается текстовому представлению, сборное представление каким-то образом перестает работать, что означает, что оно не запрашивает источник данных о новых ячейках при прокрутке этого сборного представления.

Это приводит к тому, что в виде коллекции отображается пустое пространство.

К сожалению, у меня не было времени изолировать проблему с точки зрения того, что пользовательский макет что-то нарушает, но это определенно связано с назначением строка. Если мы этого не сделаем, представление коллекции будет работать как положено.

1 Ответ

0 голосов
/ 22 января 2020

Мы все еще не нашли причину поведения, но первый обходной путь.

Возможно установить NSMutableAttributedString асинхронно.

extension UITextView {

[ ... ]

DispatchQueue.main.async {
     let optionalAttributedText = NSMutableAttributedString(fromHTMLString: htmlString, textColor: self.textColor, font: self.font)
     guard let attributedText = optionalAttributedText else { return }
     self.attributedText = attributedText

[ ... ]

В этом случае UICollectionView ведет себя нормально, показывая все клетки.

...