在我的應用程序中,我有一個全屏分頁集合視圖,每個單元格也需要全屏,因此集合視圖佈局的項目大小需要具有相同的大小作爲視圖控制器視圖的邊界大小。要做到這一點,在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()'也許可以幫助你 –