2012-12-17 12 views
29

Chcę użyć UICollectionView, aby wyświetlić przewijaną w poziomie listę miniaturek, jednak chcę, aby był to pojedynczy wiersz. W innym widoku wyświetlam miniatury w numerze UICollectionView, ale ten przewija się pionowo i znajduje się w pojedynczej kolumnie.UICollectionView: Jeden wiersz lub kolumna

Obecnie sposób w jaki to robię polega na zmianie rozmiaru widoku kolekcji, tak aby był wystarczająco duży dla jednego elementu, więc automatycznie się otwiera i działa, ale teraz mam do czynienia z przedmiotami o zmiennej wielkości, więc nie robi tego ". t już działają.

W jaki sposób wyświetlasz jeden wiersz lub kolumnę na wyświetlaczu UICollectionView?

Odpowiedz

25

Zgaduję, że używasz wbudowanego Flow Layout. Jednak w twoim przypadku powinieneś wykonać niestandardowy UICollectionView Layout. Zrób to podklasa UICollectionViewFlowLayout i dodać ten kod w metodzie init:

- (id)init { 
    if ((self = [super init])) { 
     self.scrollDirection = UICollectionViewScrollDirectionHorizontal; 
     self.minimumLineSpacing = 10000.0f; 
    } 
    return self; 
} 

minimumLineSpacing jest kluczem do podejmowania mieć jedną linię tutaj.

Mam nadzieję, że to pomoże!

+0

wiesz, jak to wpływa na wewnętrzną rozmiar zawartości? Próbuję zaimplementować widok kolekcji pojedynczego wiersza jako przesuwanie w górę/pop over i ograniczać go do minimalnego wewnętrznego rozmiaru dla pojedynczego wiersza. Dzięki! –

+1

Jeśli ktoś się zastanawia, dlaczego to nie działa, a Ty ustawiasz klasę wewnątrz storyboardu, spróbuj to zrobić wewnątrz: - (id) initWithCoder: (NSCoder *) aDecoder {} zamiast: – bitwit

+6

+1 - Jedna notatka jest to, że nie potrzebujesz do tego podklasy (przynajmniej ja tego nie robiłem). Podczas inicjowania mojego widoku kolekcji zrobiłem 'flow.minimumInterItemSpacing = CGFloat_Max;' – Logan

12

Okazało się, że ustawienie minimumLineSpacing właśnie zrobił mój obszar przewijania naprawdę duże i że ustawienie minimumInteritemSpacing=big osiągnąć zachowując elementy w jednym rzędzie lub kolumnie, przewijanie w środku środku collectionview.

+0

@ giorashc, ponieważ ustawiło się on na boki, więc w tym przypadku byłby on ułożony pionowo. W związku z tym ustawienie dużej wartości dla minimumInterItemSpacing wymagałoby więcej miejsca niż ekran jest wysoki, a rozkładałoby się na wiele linii w poziomie. –

9

Nie ma prawdziwego powodu do podklasy, jeśli można ufać rzutowi typu.

((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f; 

Jeśli masz kolekcjęView załadowaną z końcówki, możesz również zagrać z parametrami w Inspektorze atrybutów i rozmiarów.

To samo dotyczy kierunku przewijania.

0

Po zainicjowaniu swojego UICollectionView należy podać następujący parametr UICollectionViewFlowLayout w parametrze init.

Uwaga: nie trzeba utworzyć podklasę UICollectionViewFlowLayout

var collectionViewFlowControl = UICollectionViewFlowLayout() 
collectionViewFlowControl.scrollDirection = UICollectionViewScrollDirection.Horizontal 

0 px odstępy między komórkami:

collectionViewFlowControl.minimumInteritemSpacing = 0; 
collectionViewFlowControl.minimumLineSpacing = 0; 

collectionView = UICollectionView(frame: CGRectMake(0, 0, self.view.frame.size.width, 120), collectionViewLayout: collectionViewFlowControl) 
0
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init]; 
[layout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; 

layout.minimumInteritemSpacing = 0; 
layout.minimumLineSpacing = 0; 


blendEffectCollectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 95, 320, 60) collectionViewLayout:layout]; 
[blendEffectCollectionView setDataSource:self]; 
[blendEffectCollectionView setDelegate:self]; 
[blendEffectCollectionView registerClass:[BlendModeCell class] forCellWithReuseIdentifier:@"cellIdentifier"]; 
[blendEffectCollectionView setBackgroundColor:[UIColor clearColor]]; 

[bottomActivityView addSubview:blendEffectCollectionView]; 
Powiązane problemy