我正在基于UICollectionView
构建的iOS应用中创建日历。每个月都有一个部分,然后是每天一个单元。我的日历视图是在xib
中定义的,然后使用init
方法中的以下代码加载到我的自定义类中:
Bundle.main.loadNibNamed("CalendarView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
我覆盖的布局子视图方法如下:
override func layoutSubviews() {
super.layoutSubviews()
collectionView.layoutIfNeeded()
layout.invalidateLayout() //My subclass of UICollectionViewFlowLayout
}
我正在调整单元格的大小,以便使用UICollectionViewDelegateFlowLayout
中的以下方法在一行中始终有7个:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = (collectionView.bounds.width - 1) / 7.0
return CGSize(width: width, height: min(width, 48))
}
单元格也在单独的xib
文件中定义。
当包含的视图控制器加载时,单元格都太小,然后在大约1秒钟后它们会捕捉到正确的大小。仅在首次加载时会发生这种情况,宽度在旋转后或在iPad多任务模式下调整应用程序大小后正确。
以下任何一项均无效。
layoutSubviews()
UICollectionView
单元格大小答案 0 :(得分:0)
如果您正在使用动态尺寸调整单元格,则应在FlowLayout中添加estimatedItemSize
。
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.estimatedItemSize = CGSize(width: flowLayout.itemSize.width, height: flowLayout.itemSize.height)
}
参考:关于自动调整单元格here的大小的文章。