2013-01-17 70 views
26

我試圖動態地設置UICollectionView節標題的高度,但使用下面的代碼,我沒有看到任何更改。視圖中繪製了正確的項目,但高度不會變差。對不起,如果這是一個重複的問題,但我似乎無法找到任何與UICollectionView對象相關的任何內容。提前致謝。動態更改UICollectionReuseableView(集合節標題)的高度

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView 
      viewForSupplementaryElementOfKind:(NSString *)kind 
           atIndexPath:(NSIndexPath *)indexPath 
{ 
    PhotoVideoHeaderCell *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader 
                      withReuseIdentifier:@"videoHeaderView" 
                       forIndexPath:indexPath]; 
    if (indexPath.section == 0) { 
     // photos 
     [headerView setSection:@"Photo"]; 
    } else { 
     [headerView.VehicleDetailView removeFromSuperview]; 
     CGRect frame = headerView.frame; 
     frame.size.height = 60; 
     [headerView setFrame:frame]; 
     [headerView setNeedsDisplay]; 
     [headerView setBackgroundColor:[UIColor grayColor]]; 
     [headerView setSection:@"Video"]; 
    } 

    return headerView; 
} 

回答

64

你代表應實現以下功能,假設你使用流佈局:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section; 

您可以返回不同的尺寸每個頭。在水平滾動收集視圖中,僅使用寬度。在垂直滾動的情況下,只使用高度。未使用的值將被忽略 - 您的視圖將始終被拉伸以分別填充水平/垂直集合視圖的全部高度/寬度。

頁腳也有相應的方法。

+1

這個工程,但我怎麼知道這部分我正在編輯,我只想做對部分索引1 – DirtyKalb

+0

使用'section'參數在該方法中。將您正在編輯的部分存儲在ivar中,然後進行比較。如果它們不相同,則返回佈局的'headerReferenceSize'。 –

+0

很抱歉在這裏做了一個完整的noob,但headerReferenceSize不是collectionViewLayout的一部分......我是否需要創建一個標題實例來讀取框架? – DirtyKalb

1

嘗試這樣:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { 
    UICollectionReusableView *header = [siteMapCollection dequeueReusableSupplementaryViewOfKind: UICollectionElementKindSectionHeader withReuseIdentifier: @"headerID" forIndexPath: indexPath]; 
    NSString *headerText = @"This is my header"; 
    UIFont *labFont = [UIFont fontWithName: @"HelveticaNeue-CondensedBold" size: 20.0]; 
    CGSize textSize = [dummyText sizeWithFont: labFont]; 
    UILabel *headerLabel = [[UILabel alloc] initWithFrame: CGRectMake(0, header.frame.size.height - (textSize.height + 12), header.frame.size.width, textSize.height + 8)]; 
    [headerLabel setFont: labFont]; 

    [header addSubview: headerLabel]; 

    return header; 
} 
1
斯威夫特3

接受的答案和4:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { 
    return CGSize(width: collectionView.frame.size.width, height: 250) 
}