我正在使用 aUICollectionViewFlowLayout
在水平滚动视图中排列视图图块。默认情况下,我使用以下命令将它们设为正方形UICollectionViewDelegateFlowLayout
:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
var nominalSize = CGSize(width: collectionView.frame.height, height: collectionView.frame.height)
return nominalSize
}
这样我就得到了方形瓷砖,大小与当前的大小相符collectionView
。但是,有一种情况是我修改了某些图块的标称尺寸,所以它看起来有点像:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
var nominalSize = CGSize(width: collectionView.frame.height, height: collectionView.frame.height)
if someTest(indexPath) {
nominalSize = self.tweakNominalSize(nominalSize)
}
return nominalSize
}
我还没有想出的是如何触发集合视图 A)召回委托以重新布局和 B)如何使其更改动画。
我试过的:
1)
self.myCollectionView.setNeedsLayout()
UIView.animateWithDuration(200.milliseconds) {
self.myCollectionView.layoutIfNeeded()
}
这无济于事。print()
委托回调中的语句表明它从未被调用。
2)
self.schedulesView.setCollectionViewLayout(
self.schedulesView.collectionViewLayout,
animated: true)
这也无济于事。我不确定它是聪明还是什么。也许足够聪明地注意到它们是相同的并选择退出?
3)
self.schedulesView.startInteractiveTransition(
to: self.schedulesView.collectionViewLayout,
completion: nil)
self.schedulesView.finishInteractiveTransition()
这确实会导致布局发生!但根本没有动画。它只是突然改变。它似乎将磁贴的右侧保持在原来的位置,而不是左侧,并且它似乎在我在两次调用之间进行了其他 UI 更改之后明显发生。