约束更改后更新集合视图单元格

Dav*_*d U 5 constraints ios autolayout uicollectionview

我在 iOS 9 中的集合视图单元格中遇到自动布局问题。

在集合视图的 :cellForItemAtIndexPath: 期间,我更改了约束:

[[self rootStack] setDistribution:UIStackViewDistributionFillEqually];

或者

[[self rootStack] setDistribution:UIStackViewDistributionFillProportionally];

在单元格的 PreferredLayoutAttributesFittingAttributes: 期间,我尝试强制进行另一轮布局:

- (UICollectionViewLayoutAttributes*) preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
    [self setNeedsLayout];
    [self layoutIfNeeded];

    return layoutAttributes;
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,当显示单元格时,有些单元格会显示约束更改的效果,有些则不会。如果我将不显示更改的单元格滚动到屏幕外,然后滚动回该单元格,它就会显示更改。将约束更改移动到单元格的 updateConstraints 会导致没有任何单元格在首次显示时显示更改。

我可以通过在集合视图控制器的 viewWillAppear: 期间调用集合视图上的 reloadData 来修复显示的第一个单元格的问题。但是,一旦我开始滚动,进入视图的一些单元格的格式不正确(除非我滚动经过它们,然后滚动回它们)。

有没有办法确保所有单元格在第一次显示时格式正确?