swift - 如何禁用 UICollectionView 中特定项目单元格的自动大小
问题描述
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: with CGRectNull is undefined。
你能告诉我如何让第一个项目全宽其他项目保持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)
}
解决方案
推荐阅读
- c# - 在 iframe 中使用 RedirectToAction 后,ASP.NET MVC 会话被重置
- sql - 如何将json解析为行而不是列?
- jquery - 如何在不使用 Shopify 中的任何应用的情况下添加使用 google 或 facebook 登录?
- php - 如何在moodle中显示统计数据?
- swift - 如何在特定视图控制器中使用默认动画更改 UINavigationController 导航栏背景颜色
- javascript - Firestore:动态更新文档(网络)
- docker - 管理用于 docker 构建的本地/私有 Golang 包和模块
- javascript - 如何使用localStorage恢复页面重新加载时vimeo的暂停时间?
- ruby-on-rails - 如何正确修补 RoR 上的 Numeric 类?
- amazon-web-services - 如何通过 AWS Quicksight 连接到 Redshift Spectrum 上的外部架构/表?