Мне нужно отключить макет collectionView при изменении границ, будь то при вращении или при изменении размера ячейки.
В iOS 12 и ниже я использовал этот код, и он работает:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.invalidateLayout()
}
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.invalidateLayout()
}
}
Однако в iOS 13 функции traitCollectionDidChange
и viewWillTransition
изменились там поведение и больше не вызывается при изменении размера.
Что будет лучшим местом для аннулирования макетов лучшим гостем, так это viewWillLayoutSubviews
, однако я не уверен на 100%, будет ли это хорошей идеей.
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if #available(iOS 13, *) {
if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
layout.invalidateLayout()
}
}
}