2017-05-30 26 views
13

Bardzo dziwny problem na UICollectionView ...Małe luki występujące w sekcji UICollectionView

Mam UIImageView poniżej w UICollectionView i zauważyłem, istnieje wiele włoskowate/1px wyraźne linie pojawiające się w niektórych punktach w collectionView ... jeden pojawiające się poniżej komórce opis ...

first

Zakładając, że był problem z komórką, mam zbadać każdy sposób mogę myśleć bez radości. Mam podwoiła tę komórkę, aby zilustrować problem dzieje się między IndexPathsekcji 1 i pkt 6 i 7

Nawet gdy komórka ulega podwojeniu się ... komórka linia dzielnik poniżej jest częścią tego samego section, więc zdecydowanie nie jest to stopka ani nagłówek ???

second

My FlowLayout jest

flowLayout.scrollDirection = .vertical 
flowLayout.minimumInteritemSpacing = 0.0 
flowLayout.minimumLineSpacing = 0.0 
flowLayout.sectionInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0) 
flowLayout.headerReferenceSize = .zero 
flowLayout.footerReferenceSize = .zero 

zrobiłem tle czerwonego collectionView podkreślić problem ... nie mam pojęcia, na czym polega problem.

Zobacz Hierarchia

view

Aktualizacja

zmieniając flowLayout.minimumLineSpacing = 0.0 do -1.0 'naprawia' problem w niektórych miejscach ... dlaczego nie będzie to dokładna wartość pozostanie wzdłuż wszystkich komórkach? i pozostać na poziomie 0,0?

flowLayout.scrollDirection = .vertical 
flowLayout.minimumInteritemSpacing = 0.0 
flowLayout.minimumLineSpacing = -1.0 
flowLayout.sectionInset = .zero 
+0

Czy ten problem występuje na symulatorze lub na prawdziwym urządzeniu? –

+0

Pojawia się zarówno smutno ... miałem nadzieję, że to był po prostu symulator, ale niestety. – Magoo

+0

Czy możesz również uwzględnić hierarchię widoku? (przechwycone z przeglądarki UI lub metodą rekursywnąDescription:) –

Odpowiedz

9

Mam tylko poszedł i go rozwiązał ... godzin po nałożeniu 300 bounty na nim ..

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 

// calculated CGSize... 

    return CGSize(width:collectionView.bounds.size.width,height:ceil(calculatedHeight) 

} 

pamiętają @ @ 2x 3x zawsze ceil twoje obliczone komórki ... UICollectionViews nie może włamać 0,5 punktów

1

aby dodać do odpowiedzią @Magoo:

CGSize struktura jest czasem używane reprezentować wektor odległości, a nie jego fizyczny rozmiar. Jako wektor jego wartości mogą być ujemne. Aby znormalizować strukturę, tak aby jej rozmiar był reprezentowany przez wartości dodatnie, wywołaj znormalizowaną funkcję.

W Swift 2.x będzie trzeba użyć:

return CGSizeMake(width:collectionView.bounds.size.width,height:ceil(calculatedHeight) 

Od Swift 3 nie można już używać CGSizeMake:

return CGSize(width:collectionView.bounds.size.width,height:ceil(calculatedHeight) 
  • Funkcja ceil zaokrągla liczbę w górę do najbliższą liczbę całkowitą, jeśli to konieczne.
  • Do zaokrąglania w dół masz floor.