#ios #swift #uitableview #uicollectionview
#iOS #быстрый #uitableview uitableview #uicollectionview
Вопрос:
Я использую представление коллекции в боковой UITableViewCell при перезагрузке
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
guard let _cell = cell as? BrandRow else { return }
let _flow = columnLayout
_flow.scrollDirection = .horizontal
_cell.collectionView.collectionViewLayout = _flow
_cell.collectionView.delegate = self
_cell.collectionView.tag = indexPath.section
_cell.collectionView.dataSource = self
_cell.collectionView.showsVerticalScrollIndicator = false
_cell.collectionView.showsHorizontalScrollIndicator = false
_cell.collectionView.reloadData()
}
В iPhone 6 при повторном использовании ячейки происходит сбой моего приложения
_cell.collectionView.reloadData()
кто-нибудь может, пожалуйста, сообщить мне, что не так с моим кодом?
Ошибка
Ошибка утверждения в -[UICollectionViewData validateLayoutInRect:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-3698.140/UICollectionViewData.m:447
2021-01-28 17:10:08.921104 0500 Okayhai[630:48362] *** Завершение работы приложения из-за неперехваченного исключения ‘NSInternalInconsistencyException’, причина: ‘UICollectionView получил атрибуты макета для ячейки с несуществующим путем к индексу: <NSIndexPath: 0xec57a98e0a4dfaae> {длина = 2, путь = 0 -4}’
Комментарии:
1. Код, который задает индикаторы макета, делегирования и прокрутки, должен быть в другой функции, которая запускается только один раз. Что такое сообщение о сбое / исключении?
2. проверьте ошибку, о которой я упоминал в запросе.
3.
willDisplayCell
это не самое подходящее место для запуска этого кода. Одноразовая настройка, которую вы должны выполнить вinit
методе. Другой код должен быть в вашемcellForRowAt
.tag
Также лучше избегать хранения данных indexpath. Это может вызвать проблемы, если ваша таблица допускает изменение порядка ячеек или вставку / удаление.
Ответ №1:
попробуйте это:
ниже _cell.collectionView.reloadData()
поместите
_cell.collectionView.collectionViewLayout.invalidateLayout()
Комментарии:
1. я уже использовал его, но в моем случае он не работает.