1

我有一个视图控制器,其中包含一个 UICollectionView 和一个 UIImageView。

UICollectionView 和图像视图是 UIViewController 的托管视图中的兄弟姐妹。当用户滚动 UICollectionView 时,UIImage 有时应该将自身附加到 UICollectionViewCell 项之一的底部。

我正在将项目转换为使用自动布局,我真的很高兴能够使用约束将 UIImageView 附加到 UICollectionViewCell 的底部。但是,它似乎不起作用。

当代码检测到相关的 UICollectionViewCell 变得可见时,它会从 UIImageView 中删除先前的定位约束,并添加一个约束,使 UIImageView 的顶部与 UICollectionViewCell 的底部相同。

当这种情况发生时, UIImageView 就会消失。我认为它在单元格可见之前已附加到 UICollectionViewCell,但这没关系,然后它应该滚动到它的视图中。那没有发生。

所以我的问题是......这可以工作吗?在我看来,UICollectionView 很有可能使用老式的中心/边界系统来管理它的项目。特别是如果您查看 UICollectionViewLayout 协议。这是否意味着我不能将约束附加到 UICollectionViewCell 并期望在单元格在集合视图中移动时更新约束?

我在下面附上了相关代码,以防这是一个简单的编码问题,而不是更高级别的“你要回到绘图板”一个。

    if([collectionView.indexPathsForVisibleItems containsObject:self.sliderPositionIndex]){
    UICollectionViewCell *lockedCell=[collectionView cellForItemAtIndexPath:self.sliderPositionIndex];
    [self.view removeConstraint:self.sliderVerticalSpaceConstraint];
    self.sliderVerticalSpaceConstraint=[NSLayoutConstraint constraintWithItem:self.sliderTab
                                                                      attribute:NSLayoutAttributeTop
                                                                      relatedBy:NSLayoutRelationEqual
                                                                         toItem:lockedCell
                                                                      attribute:NSLayoutAttributeBottom
                                                                     multiplier:1
                                                                       constant:0];
    [self.view addConstraint:self.sliderVerticalSpaceConstraint];
    [self.view setNeedsUpdateConstraints];
4

0 回答 0