我的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 Simulator上正常工作(我编辑了图像以在第一行中放置两个项目以检查它们是否适合):
那么iPhone SE怎么了?
我不想发现其他iPhone或iPad也可能存在相同的问题
答案 0 :(得分:1)
375.0是iPhone 6s和X的大小,而不是iPhone SE的320.0大小
原因是在iPhone 6s模式下设置了collectionView的宽度限制,但是后来切换到SE模拟器时,此限制未更新。
答案 1 :(得分:0)
我认为存在单元间距问题。似乎您的实现中存在默认的单元格间距。您应该尝试使用以下代码在collectionview的原始位置调整两个单元格:
extension ViewController : UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let collectionViewWidth = collectionView.bounds.width
return CGSize(width: collectionViewWidth/2, height: 150)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
}
此外,如果您的UICollectionView
约束符合您的要求,则应进行检查。
答案 2 :(得分:0)
请尝试从视图而不是collectionView使用广角镜。
尝试一下:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (view.frame.width / 2.0) - 5, height: 150) // provide little bit space between cells
}
希望这会有所帮助。
答案 3 :(得分:0)
最好的解决方案是,稍微延迟在主线程中重新加载集合视图。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.10) {
self.myCollectionView.reloadData()
}