2013-03-01 21 views
6

Başlıkları bir uicollectionview uygulamasında nasıl uygularsınız? Tamamlayıcı görüşlere katılabileceğinizi biliyorum, ancak onları bir üst düzeydeki bölümler gibi bir bölümün üzerinde "nasıl" yapılacağını bilmiyorum.UICollectionView Üst ve Yan Üstte Kayan Üstbilgiler

İşte durumum: Izgara biçiminde düzenlenmiş hücrelerle bir koleksiyon görünümüm var. Yatay ve dikey olarak ilerleyebilirsiniz. Üstte bir üstbilgi olmak istiyorum, böylece yatay olarak kaydırdığınızda yatay olarak kaydırılır, ancak dikey olarak kaydırılmaz. Aynı zamanda sol tarafta da yatay olarak değil, koleksiyon görünümünde dikey olarak kaydırılan aynı şeyi istiyorum. Bunu doğru yaklaşımı ek görüşler ile uyguluyor mu?

Aradığım son işlev iOS'taki Sayılar elektronik tablo uygulamasına benziyor.

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

19

Güncelleme: birlikte

let flow = collectionView.collectionViewLayout as! UICollectionViewFlowLayout 
flow.sectionHeadersPinToVisibleBounds = true 

Geçiş bunu.

+0

Hızlı ve basit. Bu, UITableView'da gruplandırılmış/düz seçim yapmaktan daha iyi bir seçenektir. Sağolun efendim. – NSGangster

+0

Harikasınız! Korku veren! – deepax11

9

DÜZENLEME: Yorumlarda belirtildiği gibi, bu yanıt geçerlidir, ancak birden çok bölüm için geçerli değildir. Daha iyi bir çözüm için bu blogu bakınız: http://blog.radi.ws/post/32905838158/sticky-headers-for-uicollectionview-using#notes


Sen düzeninde o davranışını belirtmek gerekir: iOS9 için

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSMutableArray* attributesArray = [[super layoutAttributesForElementsInRect:rect] mutableCopy]; 

    BOOL headerVisible = NO; 

    for (UICollectionViewLayoutAttributes *attributes in attributesArray) { 
    if ([attributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader]) { 
     headerVisible = YES; 
     attributes.frame = CGRectMake(self.collectionView.contentOffset.x, 0, self.headerReferenceSize.width, self.headerReferenceSize.height); 
     attributes.alpha = HEADER_ALPHA; 
     attributes.zIndex = 2; 
    } 
    } 

    if (!headerVisible) { 
    UICollectionViewLayoutAttributes *attributes = [self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader 
                         atIndexPath:[NSIndexPath 
                            indexPathForItem:0 
                            inSection:0]]; 
    [attributesArray addObject:attributes]; 
    } 

    return attributesArray; 
} 
+0

Böylece, çerçevenin x-origin'inin "self.collectionView.contentOffset.x" olarak ayarlanması, görünümün çerçevesinin kenarına takılı kalmasını sağlayacak mı? Cevabınız için çok teşekkürler! –

+0

Bu durumda, x ekseni için doğrudur. Senaryonuz için y eksenini izleyen ikinci bir başlık ile çoğaltmanız gerekir. –

+0

Bu, yalnızca ilk bölüm için yalnızca başlıkları olan koleksiyon görünümleri için kullanılan bir perişan hackidir. –