我的HomeHorizontalSpecialCell
继承了UICollectionViewCell,并且有一个属性是collectionView。这个collectionView通过延迟加载构建
private lazy var _collectionView: UICollectionView! = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.minimumLineSpacing = 10
let itemWidth = (kScreenWidth - 4 * layout.minimumLineSpacing) / 3.4
let itemHeight = itemWidth
layout.itemSize = CGSize(width: itemWidth, height: itemHeight)
let collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: itemHeight), collectionViewLayout: layout)
collectionView.delegate = self
collectionView.dataSource = self
collectionView.backgroundColor = UIColor.white
collectionView.contentInset = UIEdgeInsetsMake(0, 7, 0, 7)
// register cell
collectionView.register(HomeHorizontalSpecialGoodCell.self, forCellWithReuseIdentifier: HomeHorizontalSpecialCell.reuseSpecialCellID)
collectionView.showsHorizontalScrollIndicator = false
self.contentView.addSubview(collectionView)
return collectionView
}()
当设置数据时,此collectionView调用reloadData
方法并开始构造和注册单元格。
在dataSource方法中,我将这些注册的可重用单元格出列
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// crash at here on big size iPhone
let specialGoodCell = collectionView.dequeueReusableCell(withReuseIdentifier: HomeHorizontalSpecialCell.reuseSpecialCellID, for: indexPath) as! HomeHorizontalSpecialGoodCell
if indexPath.row != (_dataList?._item.count)! { // good cells
specialGoodCell.goodModel = _dataList?._item[indexPath.row]
} else { // last cell
specialGoodCell.setMoreImage("spe_more")
}
return specialGoodCell
}
强制解包一个单元格导致应用程序崩溃当collectionView在一些大尺寸iPhone上出现一个单元格,但是小尺寸没有。
我发现第一次在大尺寸iPhone上直接初始HomeHorizontalSpecialCell
的情况,但是在小尺寸时需要滚动collectionView来初始化这个单元格实例。
为什么在大尺寸iPhone上加载此单元时应用程序崩溃?
有人可以帮忙吗?答案 0 :(得分:0)
执行此操作的一种好方法是使用viewController作为collectionView的数据源和委托。也许这篇文章可以帮到你。 Putting a UICollectionView in a UITableViewCell in Swift