将顶部 header 添加到已经包含 header 部分的 UICollectionview

Adding a top header to UICollectionview that already has sections with headers

假设我有一个包含部分和项目的 UICollectionview。 对于每个部分,我都会生成一个 header 作为下面的代码。

问题:如何将顶部 header 视图添加到 collectionView 本身 这与下面 header 演示的部分不同(使用 objective-c、IB、自动布局)

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView *reusableview = nil;




    if (kind == UICollectionElementKindSectionHeader) {
        HeaderCollectionReusableView *headerView = [self.collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];


        headerView.label1.text = "This is a section title";

        reusableview = headerView;
    }



    return reusableview;
}

使用当前 header 视图和一个视图中的顶部 header 视图为第一部分生成另一个 header。不要忘记在第一部分 collectionView:layout:referenceSizeForHeaderInSection: 中 return 更大的尺寸。

我会做这些步骤来完成它:

  1. 在故事板中,创建一个 UIView 并根据需要设计它的子视图。请确保您选中了刚刚创建的 UIView 的 clipToBounds 复选框。

  2. 创建您的约束。我猜它应该是顶部 0、左侧 0、右侧 0,当然还有高度 0(因为这是你提到的初始状态)。

  3. 为高度约束创建 IBOutlet 并将其连接到您刚刚创建的高度约束。我们称它为 viewHeaderHeightConstraint.

  4. 当您要显示此视图时:

    self.viewHeaderHeightConstraint.constant = 50; // Or any other value
    [self.view layoutIfNeeded];
    
  5. 如果你想动画高度变化:

    self.viewHeaderHeightConstraint.constant = 50; // Or any other value
    [UIView animateWithDuration:0.3 animations:^{
    
        [self.view layoutIfNeeded];
    
    } completion:^(BOOL finished) {
    
        // Do something after completion
    
    }];