ios - UICollectionViewCell 宽度大于我在 sizeForItemAt 中设置的宽度
问题描述
我的宽度/高度UICollectionView
匹配所有可用空间。
我想在一行中显示两个单元格(两列)
所以一个单元格的宽度应该是UICollectionView
( collectionView.frame.width / 2
)的一半宽度
所以我以编程方式改变单元格的宽度UICollectionViewDelegateFlowLayout
:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width / 2.0, height: 150)
}
但单元格的视觉宽度远大于collectionView.frame.width / 2.0
(在 iPhone SE 模拟器上测试)
所以它需要超过屏幕的半角空间
在这里,我打印了有关尺寸的信息:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath)
print("didSelectItemAt \(cell.frame.width), table width: \(collectionView.frame.width), item calc width: \(collectionView.frame.width / 2)")
}
didSelectItemAt 单元格宽度 187.5,表格宽度:375.0,半宽度:187.5
为什么会这样?
边距也有问题,但首先我必须解决这个问题
更新
虽然它适用于 iPhone 6s 模拟器(我编辑图像以将两个项目放在第一行以检查它们是否适合):
那么 iPhone SE 有什么问题呢?
我不想发现其他 iPhone 或 iPad 也可能存在同样的问题
解决方案
375.0 是 iPhone 6s 和 X 的尺寸,而不是 iPhone SE 的 320.0
原因是在 iPhone 6s 模式下设置的 collectionView 的宽度约束,但后来切换到 SE 模拟器时,此约束没有更新。
推荐阅读
- amazon-web-services - 从 Lambda(无 VPC)调用 Lambda(VPC 内部)。如果我没有在 VPC 中连接 Internet 网关,我会从 Lambda(VPC 内部)得到响应吗
- web-services - 带有肥皂网络服务的 WSO2 IS 5.7 editUserStore 无法正常工作
- javascript - 将音频元素混合到一个流目的地以与 MediaRecorder 一起使用
- r - R - Plotly 几个调色板分组栏
- bash - 如何提取 CSV 字段并将其传递给另一个命令
- walmart-api - 如何通过 Walmart BuyNow URL 发送回调 URL
- php - PHP 使用多字符分隔符解析 csv
- c - struct 中指针的 malloc() 不会将内存绑定到声明的大小
- python - 如何将引导样式添加到我的 django 表单中?
- karma-jasmine - 为什么业力什么都不显示?