override func viewDidLoad(){
let layout = UICollectionViewFlowLayout()
collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
}
}
выше код работает хорошо, как я ожидал.
но мне нужно для 1-го элемента полной ширины, но он больше не работает и дают мне исключение.
extension WordViewController : UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if indexPath.item == 0{
return CGSize(width: self.collectionView.frame.width, height: 100)
}
return UICollectionViewFlowLayout.automaticSize
}
Исключение:
Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «UICollectionViewLayoutAttributes: -setFrame: with CGRectNull не определено.
Не могли бы вы сказать мне, как я могу сделать 1-й элемент полной ширины, другой элемент сохранить UICollectionViewFlowLayout.automaticSize
Обновление:
, если закомментировать текущие строки:
// if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
// flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
// }
затемсделай так, тогда работай нормально.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if indexPath.item == 0{
return CGSize(width: self.view.frame.width - 20, height: 100)
}
return CGSize(width: 100, height: 100)
}