override func viewDidLoad(){
let layout = UICollectionViewFlowLayout()
collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
}
}
上面的代码按我的预期运行良好。
但是我需要第一项全角,但是它不再工作了,给了我个例外。
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:与CGRectNull是 未定义。
您能告诉我如何使第一件商品的全宽其他商品保持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)
}