Jak ustawić odstępy między komórkami w sekcji UICollectionView
? Wiem, że istnieje właściwość, minimumInteritemSpacing
którą ustawiłem na 5.0, ale odstępy nie pojawiają się 5.0. Wdrożyłem metodę delegowania przepływu.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
wciąż nie otrzymuję pożądanego rezultatu. Myślę, że to minimalne odstępy. Czy nie ma sposobu na ustawienie maksymalnego odstępu?
ios
objective-c
uicollectionview
Vishal Singh
źródło
źródło
Odpowiedzi:
Wiem, że temat jest stary, ale na wypadek, gdyby ktoś nadal potrzebował poprawnej odpowiedzi, czego potrzebujesz:
Dodaj implementację w ten sposób:
gdzie maximumSpacing można ustawić na dowolną preferowaną wartość. Ta sztuczka gwarantuje, że odstęp między komórkami byłby DOKŁADNIE równy maksymalnej odległości!
źródło
mutableCopy
: nie modyfikujesz zawartości tablicy, ale mutujesz obiekty w niej zawarte.if
AND dodatkowy warunek:if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x) {
Wspieranie pierwszego pytania. Próbowałem uzyskać odstępy do 5 pikseli na,
UICollectionView
ale to nie działa, również zUIEdgeInsetsMake(0,0,0,0)
...Na UITableView mogę to zrobić, bezpośrednio określając współrzędne x, y w rzędzie ...
Oto mój kod UICollectionView:
Aktualizacja: Rozwiązałem mój problem za pomocą następującego kodu.
ViewController.m
źródło
Korzystając z układu poziomego przepływu, uzyskiwałem również odstęp 10 punktów między komórkami. Aby usunąć odstępy, musiałem ustawić
minimumLineSpacing
tak samo, jakminimumInterItemSpacing
zero.Ponadto, jeśli wszystkie komórki mają ten sam rozmiar, łatwiej i wydajniej jest ustawić właściwość w układzie przepływu bezpośrednio zamiast metod delegowania.
źródło
minimumInteritemSpacing
. Właśnie ustawienieminimumLineSpacing = 0
mojego poziomego układu usunęło poziome odstępy między przedmiotami.Pamiętaj, że jest to minimalna przestrzeń między wierszami, a nie minimalne odstępy między elementami lub komórki. Ponieważ kierunek przewijania kolekcji collectionView to POZIOME .
Jeśli jest pionowy, musisz ustawić przestrzeń komórki lub przestrzeń między elementami dla poziomej przestrzeni między komórkami i odstępów między liniami dla pionowej przestrzeni między komórkami.
Wersja C celu
Wersja szybka:
źródło
Wypróbuj ten kod, aby upewnić się, że odstęp między pikselami wynosi 5 pikseli:
źródło
Szybka wersja najpopularniejszej odpowiedzi. Odstęp między komórkami będzie równy
cellSpacing
.źródło
Znalazłem bardzo łatwy sposób konfigurowania odstępów między komórkami lub wierszami za pomocą IB.
Wystarczy wybrać UICollectionView z pliku storyboard / Xib i kliknąć w Inspektorze wielkości, jak określono na poniższym obrazku.
Aby programowo skonfigurować przestrzeń, użyj następujących właściwości.
1) Do ustawienia odstępu między rzędami.
2) Do ustawienia odstępu między elementami / komórkami.
źródło
Należy zwrócić uwagę na nazwę właściwości minimumInterItemSpacing . Będzie to minimalny odstęp między przedmiotami, a nie dokładny odstęp. Jeśli ustawisz minimumInterItemSpacing na pewną wartość, możesz mieć pewność, że odstępy nie będą mniejsze niż ta wartość. Ale jest szansa na wyższą wartość.
W rzeczywistości odstępy między elementami zależą od kilku czynników itemSize i sectionInset . Widok kolekcji dynamicznie umieszcza zawartość na podstawie tych wartości. Nie możesz więc zapewnić dokładnego odstępu. Powinieneś zrobić kilka prób i błędów z sectionInset i minimumInterItemSpacing .
źródło
Odpowiedz na Swift 3.0, Xcode 8
1.Upewnij się, że ustawiłeś delegowanie widoku kolekcji
2. Zaimplementuj protokół UICollectionViewDelegateFlowLayout , a nie UICollectionViewDelegate.
źródło
Prosty kod odstępów
źródło
Głosowało odpowiedź (a także wersja szybka ) ma mały problem: nie będzie duży odstęp po prawej stronie.
Wynika to z tego, że układ przepływu jest dostosowywany, aby uzyskać dokładne odstępy między komórkami, z zachowaniem swobodnego ruchu w lewo .
Moim rozwiązaniem jest manipulowanie wstawką sekcji, aby sekcja była wyrównana do środka, ale odstępy są dokładnie takie, jak określono.
Na poniższym zrzucie ekranu odstęp między pozycjami / liniami wynosi dokładnie 8 punktów, a wstawka sekcji lewej i prawej będzie większa niż 8 punktów (aby wyrównać do środka):
Szybki kod jako taki:
źródło
let n = Int((containerWidth + minItemSpacing)/((itemWidth+minItemSpacing)))
Definiować
UICollectionViewDelegateFlowLayout
protokół w pliku nagłówka.Zaimplementuj następującą metodę
UICollectionViewDelegateFlowLayout
protokołu:Kliknij tutaj, aby zobaczyć dokumentację Apple dotyczącą
UIEdgeInsetMake
metody.źródło
Jeśli chcesz dostosować odstępy bez dotykania rzeczywistego rozmiaru komórki, jest to najlepsze rozwiązanie dla mnie. #xcode 9 # tvOS11 # iOS11 #swift
Tak więc w UICollectionViewDelegateFlowLayout zmień implementację następnych metod, sztuczka polega na tym, że musisz użyć obu z nich, a dokumentacja tak naprawdę nie wskazywała na mnie do myślenia w tym kierunku. :RE
źródło
Podejście do scenorysu
Wybierz CollectionView w serii ujęć i przejdź do inspektora rozmiarów i ustaw minimalne odstępy dla komórek i linii na 5
Swift 5 programowo
źródło
Używam monotouch, więc nazwy i kod będą nieco inne, ale możesz to zrobić, upewniając się, że szerokość widoku kolekcji jest równa (x * szerokość komórki) + (x-1) * Minimalna odległość od x = kwota komórek na wiersz.
Wykonaj następujące kroki na podstawie minimalnego odstępu między parametrami i szerokości komórki
1) Obliczamy ilość elementów na wiersz na podstawie wielkości komórki + bieżące wstawki + minimalne odstępy
2) Teraz masz wszystkie informacje, aby obliczyć oczekiwaną szerokość dla widoku kolekcji
3) Zatem różnica między bieżącą szerokością a oczekiwaną szerokością wynosi
4) Teraz dostosuj wstawki (w tym przykładzie dodajemy go po prawej stronie, więc lewa pozycja widoku kolekcji pozostaje taka sama
źródło
Mam poziomy
UICollectionView
i podklasęUICollectionViewFlowLayout
. Widok kolekcji ma duże komórki i pokazuje tylko jeden rząd na raz, a widok kolekcji pasuje do szerokości ekranu.Próbowałem odpowiedzi iago849 i zadziałało, ale potem okazało się, że nawet nie potrzebowałem jego odpowiedzi. Z jakiegoś powodu ustawienie
minimumInterItemSpacing
nic nie robi. Odstępy między moimi przedmiotami / komórkami można całkowicie kontrolowaćminimumLineSpacing
.Nie jestem pewien, dlaczego tak działa, ale działa.
źródło
Natknąłem się na podobny problem jak OP. Niestety zaakceptowana odpowiedź nie działała dla mnie, ponieważ treść
collectionView
nie byłaby odpowiednio wyśrodkowana. Dlatego wpadłem na inne rozwiązanie, które wymaga tylko, aby wszystkie elementycollectionView
były tej samej szerokości , co wydaje się mieć miejsce w pytaniu:Ten kod zapewni, że zwracana wartość
...minimumInteritemSpacing...
będzie dokładnym odstępem między wszystkimi,collectionViewCell
a ponadto zagwarantuje, że wszystkie komórki zostaną wyśrodkowane wcollectionView
źródło
Powyższe rozwiązanie przez Vojtech-Vrbka jest poprawna, ale wyzwala ostrzeżenie:
Poniższy kod powinien to naprawić:
źródło
Wersja Swift 3
Po prostu utwórz podklasę UICollectionViewFlowLayout i wklej tę metodę.
źródło
Próbowałem odpowiedzi iago849 i zadziałało.
Szybki 4
Oto link do projektu github. https://github.com/vishalwaka/MultiTags
źródło
Poprzednie wersje tak naprawdę nie działały z sekcjami> 1. Więc moje rozwiązanie zostało znalezione tutaj https://codentrick.com/create-a-tag-flow-layout-with-uicollectionview/ . Dla leniwych:
źródło
Mam problem z zaakceptowaną odpowiedzią, więc zaktualizowałem ją, działa dla mnie:
.h
.m
źródło
Moje rozwiązanie w zakresie
Swift 3
odstępów między liniami komórkowymi jak na Instagramie:Jak programowo wykryć urządzenie: https://stackoverflow.com/a/26962452/6013170
źródło
Cóż, jeśli tworzysz poziomy widok kolekcji, aby zwolnić miejsce między komórkami, musisz ustawić właściwość
minimumLineSpacing
.źródło
Spróbuj pobawić się tą metodą:
źródło