我尝试了 RileyDev 的回答,但应用程序进入了无限循环。
只有当应用程序的窗口边界发生变化时才会执行委托,因此我制作了自己的 viewWillTransition(to size 和 traitCollectionDidChange.xml) 版本。
使用下面的代码,即使特征没有改变,您也可以检测窗口边界大小的变化,并相应地调整集合视图单元格的大小,从而使集合视图布局无效。
var previousWindowBounds: CGRect?
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if let currentBounds = view.window?.bounds,
let previousWindowBounds = previousWindowBounds, currentBounds != previousWindowBounds {
collectionView?.collectionViewLayout.invalidateLayout()
}
previousWindowBounds = view.window?.bounds
}