ios - CollectionView 单元格最初看起来太小,然后跳转到正确的大小
问题描述
背景
我正在我的 iOS 应用程序中创建一个日历,它是围绕UICollectionView
. 每个月都有一个部分,然后每天有一个单元格。我的日历视图在 中定义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
}
我正在调整单元格的大小,以便使用以下方法在一行中始终有 7 个UICollectionViewDelegateFlowLayout
:
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
xib 文件中的单元格大小 - 在我的布局对象上设置估计的项目大小属性
解决方案
如果您使用的是动态尺寸单元格,则应estimatedItemSize
在 FlowLayout 中添加。
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.estimatedItemSize = CGSize(width: flowLayout.itemSize.width, height: flowLayout.itemSize.height)
}
参考:有关自动调整单元大小的文章附在此处。
推荐阅读
- google-sheets - 如何阻止 Google 表格在空白单元格中显示撇号?
- python - 运行 PyQt 代码不会打开窗口
- google-api - 用户使用参数描述中的“最后一次交互”是什么意思
- android - NativeScript android原生库实现
- javascript - 单击另一个父菜单的子菜单时关闭上一个父菜单(但两个父菜单都应该能够保持打开状态)
- bash - 管道传输到另一个程序时未保留变量值
- spring-boot - 如何使用 Spring Security 检索 CAS 服务器发送的属性和用户名
- bash - Helm 安装失败并出现错误:无法从 Azure Cloud Shell 中找到分蘖
- php - 在一张表中显示多维数组中的数据
- javascript - 访问对象标签内网页上的 JS