在我的应用程序中,我有一个全屏分页集合视图,每个单元格也需要全屏,因此集合视图布局的项目大小需要具有相同的大小作为视图控制器视图的边界大小。要做到这一点,在viewDidLayoutSubviews
我只是设置项目大小,它按预期工作。当我显示此屏幕时,viewDidLayoutSubviews
被调用3次,并且iPhone 7每次视图的边界大小为375.0 x 667.0。单元格大小与预期相同。更改流布局的项目后单元格大小不更新大小
但是,当使用3D Touch偷看和弹出来呈现此屏幕时,单元格的大小不像预期的那样大,无论是在偷看还是弹出时。 viewDidLayoutSubviews
被称为4倍,这些边界尺寸:
--- PEEK触发---
375.0 X 569.524495677234
375.0 X 569.524495677234
375.0 X 720.821325648415
---弹出触发---
375.0 X 667.0
查看时,集合视图是“全屏”,如预期的那样,高度为721,单元格的期望宽度为375,但单元格高度为569时应为721.弹出时,预期集合视图高度变为667,但单元格高度仍然为569.
设置itemSize
后,我试过拨打collectionView.layoutIfNeeded()
,但结果是一样的。为什么收集视图没有在这里更新单元大小?
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
}
}
尝试用这种'collectionView.collectionViewLayout.invalidateLayout()'也许可以帮助你 –