2014-10-30 121 views
0

我正在嘗試開發支持包含UIScrollview的自定義標題的UICollectionView。問題是(根據我迄今在文檔中發現的)UICollection視圖不支持像UITableview這樣的靜態頭部視圖(在這裏我可以使用storyboard來放置一個視圖)。標題是一個UICollectionResusableView實例,每次收集視圖上下滾動時都會重新生成該實例。很明顯,這種視圖不能連接到插座,因爲它是一個像UITableViewCell這樣的動態原型。 如何添加自定義視圖(和相對視圖控制器,我可以連接)作爲我的收藏視圖的標題?UICollectionView與自定義標題

PS。我正在開發iOS8

回答

1

我可以使用Table View Cell原型作爲標題,這樣我就可以完成Interface Builder中的所有工作。也許,這是適用於集合視圖,以及:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    AXSHomeSectionHeaderCell *sectionHeader = [tableView dequeueReusableCellWithIdentifier:@"Home Section Header"]; 

    return sectionHeader; 
} 

我想看看:

dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: 

---編輯---

也許我沒有完全理解你的問題與上面的答案。你想要一個UIView,你可以直接連接到你的視圖控制器,但你希望它與Collection視圖一起滾動?我過去使用的一種技術是在一個UIScrollView中使用UIView和UICollectionView,其中集合視圖的寬度/高度總是儘可能大,因此它不會獲得滾動視圖本身,然後應用大小到滾動視圖UIView和UICollectionView都在,所以他們滾動爲一體。

這是我如何處理這種情況:

我有一個UIScrollView與一個UIView如在頂部和低於一個UICollectionView的報頭。 UIScrollView具有決定自動佈局約束的高度,需要將其設置爲其內部兩個視圖內容的高度(也可能是寬度)。我只知道在加載數據後收集視圖有多大,所以我在重新加載並在此之後調整大小後開始測量。

// Method being called after I successfully fetched my data 
- (void)handleSuccess:(HomeScreenData *)homeScreen { 
    self.eventsCollectionViewDatasource.featuredEvents = homeScreen.events; 

    [self.eventsCollectionView reloadData]; 

    float headerHeight = CGRectGetHeight(self.headerView.frame); 
    float eventsCollectionHeight = self.eventsCollectionView.contentSize.height; 

    float totalScrollerHeight = headerHeight + eventsCollectionHeight; // This is how tall the scroller should be, you can do more fancy stuff if you need the width as well 

    self.scrollViewContainerViewHeight.constant = totalScrollerHeight; // With autolayouts, use whatever you like 
} 

它也將支持滾動滾動!事實上,我用它是一個旋轉木馬類型的收集視圖頂部橫向滾動和它下面的一個表,它垂直滾動在一起與頂級集合視圖爲基礎的傳送帶。它與Interface Builder中的任何其他非重複嵌套項目一樣平易近人。

+0

我在想你在編輯中描述的方法,但我對性能有點擔心,因爲在這種情況下單元不會被重用。我想有可能會丟棄一個靜態的UIView作爲CollectionView的頭部,就像在UITableView中一樣,但它看起來好像不可能 – Claus 2014-10-31 10:18:18

+0

我強烈建議採取這種方法,您可以在Collection中查看所有需要顯示的大小所有的單元格,並把它們放在一起,在它們自己的scrollview中包含一個頭部UIView。這聽起來像你試圖彎曲UICollectionView太多了。如果你有耐心,我可以搜索一些我的代碼併發布。 – 2014-10-31 13:25:02

+0

我會努力的,聽起來像是一個很好的解決方案。謝謝! – Claus 2014-10-31 14:21:33

0

您可以從對象庫中刪除集合可重用視圖並將其放到您的集合視圖中。然後,您可以在故事板中執行任何您想要的設計,並使用其標識符將其出列,就像您對單元格執行操作一樣(但使用 dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:您在數據源方法中執行的操作, collectionView:viewForSupplementaryElementOfKind:atIndexPath :)。

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { 
    RDReusableHeader *headerView = nil; // this is my subclass of a UICollectionReusableView 
    if (kind == UICollectionElementKindSectionHeader){ 
     headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MyView" forIndexPath:indexPath]; 
     // configure the view here 
    } 

    return headerView; 
} 
+0

這就是我現在正在做的事情,但如果我把UIScrollview放在Collection Reusable View中,每當我作爲他可重用的一部分滾動時,它都會被重新創建。我需要一個類似於UITableView的靜態視圖 – Claus 2014-10-31 10:15:53