框架大小更改时 UICollectionView 布局更改

UICollectionView layout change when frame size changes

我正在使用 UICollectionView 但我有一个奇怪的行为。

我想要水平滚动,单元格高度小(小于 UICollectionView 高度)。 点击按钮会增加 collection.

的高度

问题是我的单元格布局也在发生变化。 我希望 collection 视图高度随着单元格保持在同一位置而增加。 这里附上 2 个屏幕截图(触摸 before/after 按钮)。 这是我的代码:

var smallLayout:UICollectionViewFlowLayout = UICollectionViewFlowLayout();
smallLayout.scrollDirection = .Horizontal
var itemHeight = 100
smallLayout.itemSize = CGSizeMake(150, itemHeight);
var bottomDist:CGFloat = 1
var topDist = collHeight - itemHeight - bottomDist
smallLayout.sectionInset = UIEdgeInsets(top: topDist, left: 2, bottom: bottomDist, right: 2)
smallLayout.minimumInteritemSpacing = 15
smallLayout.minimumLineSpacing = 10

所以,当触摸按钮时,我有以下代码:

let viewHeight = CGRectGetHeight(self.view.frame)
let viewWidth = CGRectGetWidth(self.view.frame)
var collHeight:CGFloat = 600
var collYPosition = viewHeight-CGFloat(collHeight)-20
var rect = CGRectMake(0, CGFloat(collYPosition), CGFloat(viewWidth), CGFloat(collHeight))
dishCollectionView.frame = rect

所以,我无法理解为什么我的布局会发生变化。

我想让我的手机在底部。

也许如果您重置 sectionInset 的顶部以适应额外的高度,即更新的 topDist 计算。尝试在触摸代码上向您添加类似这样的内容:

var bottomDist:CGFloat = 1
var topDist = collHeight - itemHeight - bottomDist
dishCollectionView.collectionViewLayout.sectionInset = UIEdgeInsets(top: topDist, left: 2, bottom: bottomDist, right: 2)
dishCollectionView.collectionViewLayout.invalidateLayout()