在我的应用程序中,我有一个全屏分页集合视图,每个单元格也需要全屏,因此集合视图布局的项目大小需要与视图控制器的视图边界大小相同。为此,在viewDidLayoutSubviews
我只是设置了项目大小,它就按预期工作了。当我呈现这个屏幕时,viewDidLayoutSubviews
被调用 3 次,对于 iPhone 7,每次视图的边界大小为 375.0 x 667.0。单元格的大小与预期的相同。
但是,当使用 3D Touch 浏览和弹出来呈现此屏幕时,无论是浏览还是弹出时,单元格的大小都不会达到预期的大小。viewDidLayoutSubviews
被调用 4 次,边界大小如下:
--- peek triggered ---
375.0 x 569.524495677234
375.0 x 569.524495677234
375.0 x 720.821325648415
--- pop triggered ---
375.0 x 667.0
窥视时,集合视图按预期为“全屏”,高度为 721,单元格的预期宽度为 375,但单元格高度为 569,而应为 721。弹出后,集合视图高度发生变化正如预期的那样变为 667,但单元格高度仍为 569。
我试过打电话collectionView.layoutIfNeeded()
设置后itemSize
但结果是一样的。为什么集合视图不在这里更新单元格大小?
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print("\(view.bounds.width) x \(view.bounds.height)")
let boundsSize = CGSize(width: Int(view.bounds.width), height: Int(view.bounds.height))
let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
if flowLayout.itemSize != boundsSize {
flowLayout.itemSize = boundsSize
collectionView.layoutIfNeeded() //this doens't help
}
}
将集合视图的“估计大小”从检查器更改为“无”!
上述答案都不适合我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)