2014-04-26 19 views
11

Jak mogę dostać dwie kolumny w UICollectionView które zajmują całą przestrzeń bez marginesów lub luk dużo jak na zdjęciu narysowałem poniżej: enter image description hereDwie kolumny z uicollectionview

Próbowałem za pomocą następującego kodu:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    return CGSizeMake(160, 160); 
} 

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { 
    return 1.0; 
} 

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { 
    return 1.0; 
} 

ale dostałem ten wynik:

enter image description here

+0

zmienić rozmiar na coś niższego (jak 100). Możesz również to zrobić w scenorysach, dodając kolejny prototyp. –

+0

, więc jakiekolwiek rozwiązanie jeszcze? – xeravim

Odpowiedz

4

Najlepszym sposobem, aby to zrobić znalazłem w Storyboard lub w metodach delegatów, mam wielkość przedmiotu 159 i lukę pomiędzy przerwą 0,5 lub nawet mniejszą, jeśli chcesz. Po prostu bawić się z nim

0

@jacobsieradzki myślę, że trzeba zrobić jakąś zmianę s w rozmiarze twoich komórek, spróbuj najpierw, aby je zmniejszyć, myślę, że prawdopodobnie 2 komórki o szerokości 160.0 + 1.0 odstępu między wierszami jest tym, co powoduje twój problem.
Podążałem za tutorialem Ray Wenderlich kilka dni temu, który był naprawdę łatwy do naśladowania i wyjaśnia bardzo wyraźnie koncepcje stojące za UICollectionView, także w przykładowym projekcie robią coś podobnego do tego, co próbujesz osiągnąć, tutaj jest link w przypadku, gdy pomaga: CollectionViewTutorial

+0

Próbowałem tego i mogę uzyskać maksymalną szerokość 155, zanim przejdzie do następnej linii, ale jak mogę to zrobić, zajmując całą przestrzeń, jak bez żadnej luki? – jacobsieradzki

+0

Czy możesz sprawdzić ramkę kolekcji? upewnij się, że zajmuje całą szerokość –

5

Implementując protokół UICollectionViewDelegateFlowLayout , można znaleźć wiele metod implementacji układu UICollectionView.

collectionView:layout:minimumInteritemSpacingForSectionAtIndex: 
collectionView:layout:minimumLineSpacingForSectionAtIndex: 

powinno wystarczyć, aby rozwiązać ten problem.

Możesz również zaimplementować numberOfItems i numberOfSections, aby określić liczbę wierszy, kolumn.
  Alternatywnie, możesz określić rozmiar komórek jako (szerokość UICollectionView)/(liczba kolumn, które chcesz) - pewne przesunięcie między komórkami
w komórceForItemAtIndexPath.
  Domyślnie komórki są przez to obliczane i odpowiednio rozmieszczone. Po prostu zmniejszając rozmiar zobaczysz wiele kolumn. Ref1Ref2

1

aby najpierw ustawić żądany wcięcia w viewDidLoad, na przykład, umieścić wyściółkę 10

let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
     layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10) 
     collectionView.collectionViewLayout = layout 

a następnie użyć tej

func collectionView(collectionView: UICollectionView, 
     layout collectionViewLayout: UICollectionViewLayout, 
     sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
      //device screen size 
      let width = UIScreen.mainScreen().bounds.size.width 
      //calculation of cell size 
      return CGSize(width: ((width/2) - 15) , height: 155) 
    } 
Powiązane problemy