Bagaimana cara mengatur spasi sel di bagian UICollectionView
? Saya tahu ada properti yang minimumInteritemSpacing
telah saya atur ke 5.0 masih spasi tidak muncul 5.0. Saya telah menerapkan metode delegasi flowout.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
masih saya tidak mendapatkan hasil yang diinginkan. Saya pikir ini jarak minimum. Apakah tidak ada cara saya mengatur jarak maksimum?
ios
objective-c
uicollectionview
Vishal Singh
sumber
sumber
Jawaban:
Saya tahu topiknya sudah lama, tetapi siapa tahu masih perlu jawaban yang benar di sini apa yang Anda butuhkan:
Tambahkan implementasi seperti itu:
di mana maksimumSpasi dapat diatur ke nilai apa pun yang Anda inginkan. Trik ini menjamin bahwa ruang antar sel akan PERSIS sama dengan spasi maksimum !!
sumber
mutableCopy
: Anda tidak mengubah konten array, tetapi memutasikan objek di dalamnya.if
ke DAN kondisi tambahan:if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x) {
Mendukung pertanyaan awal. Saya mencoba untuk mendapatkan jarak ke 5px pada
UICollectionView
tetapi ini tidak berhasil, juga denganUIEdgeInsetsMake(0,0,0,0)
...Pada UITableView saya bisa melakukan ini dengan secara langsung menentukan koordinat x, y berturut-turut ...
Inilah kode UICollectionView saya:
Pembaruan: Memecahkan masalah saya, dengan kode berikut.
ViewController.m
sumber
Menggunakan tata letak aliran horizontal, saya juga mendapatkan jarak 10 poin antar sel. Untuk menghapus spasi yang saya perlu atur
minimumLineSpacing
jugaminimumInterItemSpacing
ke nol.Juga, jika semua sel Anda memiliki ukuran yang sama, lebih mudah dan lebih efisien untuk mengatur properti pada tata letak aliran secara langsung daripada menggunakan metode delegasi.
sumber
minimumInteritemSpacing
. Hanya pengaturanminimumLineSpacing = 0
tata letak horizontal saya menghapus jarak horizontal antara item.Ingat, ini adalah ruang baris minimum , bukan spasi antar item minimum atau ruang sel. Karena arah gulir collectionView Anda adalah HORIZONTAL .
Jika vertikal maka Anda perlu mengatur ruang sel atau ruang antar item untuk ruang horizontal antara sel dan spasi garis untuk ruang vertikal antara sel.
Versi objektif-C
Versi cepat:
sumber
Coba kode ini untuk memastikan Anda memiliki jarak 5px antara setiap item:
sumber
Swift versi jawaban yang paling populer. Ruang antar sel akan sama dengan
cellSpacing
.sumber
Saya telah menemukan cara yang sangat mudah untuk mengkonfigurasi jarak antar sel atau baris dengan menggunakan IB.
Cukup pilih UICollectionView dari storyboard / file Xib dan klik Ukuran Inspektur seperti yang ditentukan dalam gambar di bawah ini.
Untuk mengonfigurasi ruang secara terprogram gunakan properti berikut.
1) Untuk mengatur ruang antar baris.
2) Untuk mengatur ruang antar item / sel.
sumber
Harap perhatikan nama properti minimumInterItemSpacing . Ini akan menjadi jarak minimum antara item bukan spasi yang tepat . Jika Anda menetapkan minimumInterItemSpacing ke beberapa nilai, Anda dapat memastikan bahwa spasi tidak akan menjadi nilai yang kurang dari itu. Namun ada peluang mendapatkan nilai yang lebih tinggi.
Sebenarnya jarak antar item tergantung pada beberapa faktor itemSize dan sectionInset . Tampilan koleksi secara dinamis menempatkan konten berdasarkan nilai-nilai ini. Jadi Anda tidak bisa memastikan jarak yang tepat. Anda harus melakukan beberapa percobaan dan kesalahan dengan sectionInset dan minimumInterItemSpacing .
sumber
Jawaban untuk Swift 3.0, Xcode 8
1. Pastikan Anda mengatur delegasi tampilan koleksi
2.Implement UICollectionViewDelegateFlowLayout protokol, tidak UICollectionViewDelegate.
sumber
Kode sederhana untuk spasi
sumber
The sebagai jawaban (dan juga versi cepat ) memiliki masalah kecil: akan ada jarak yang besar di sebelah kanan.
Ini karena tata letak aliran disesuaikan untuk membuat jarak sel yang tepat, dengan perilaku kiri mengambang .
Solusi saya adalah memanipulasi inset bagian, sehingga bagian tersebut sejajar pusat, namun jaraknya persis seperti yang ditentukan.
Pada tangkapan layar di bawah ini, jarak item / garis persis 8pt, sedangkan bagian kiri & kanan akan lebih besar dari 8pt (untuk membuatnya rata tengah):
Kode cepat seperti itu:
sumber
let n = Int((containerWidth + minItemSpacing)/((itemWidth+minItemSpacing)))
Tetapkan
UICollectionViewDelegateFlowLayout
protokol di file header Anda.Terapkan metode
UICollectionViewDelegateFlowLayout
protokol berikut ini:Klik Di Sini untuk melihat Dokumentasi Apple tentang
UIEdgeInsetMake
metode.sumber
Pendekatan Storyboard
Pilih CollectionView di storyboard Anda dan pergi ke inspektur ukuran dan mengatur spasi min untuk sel dan garis sebagai 5
Swift 5 Secara terprogram
sumber
Jika Anda ingin mengubah jarak tanpa menyentuh ukuran sel yang sebenarnya, ini adalah solusi yang paling cocok untuk saya. #xcode 9 # tvOS11 # iOS11 #swift
Jadi di UICollectionViewDelegateFlowLayout , ubah implementasikan metode selanjutnya, triknya adalah Anda harus menggunakan keduanya, dan dokumentasi itu tidak benar-benar menunjukkan saya untuk berpikir ke arah itu. : D
sumber
Saya menggunakan monotouch, jadi nama dan kode akan sedikit berbeda, tetapi Anda dapat melakukan ini dengan memastikan bahwa lebar kumpulan koleksi sama dengan (x * lebar sel) + (x-1) * Ruang Minimum dengan x = jumlah sel per baris.
Lakukan saja langkah-langkah berikut berdasarkan pada MinimumInteritemSpacing Anda dan Lebar Sel
1) Kami menghitung jumlah item per baris berdasarkan ukuran sel + inset saat ini + jarak minimum
2) Sekarang Anda memiliki semua info untuk menghitung lebar yang diharapkan untuk tampilan koleksi
3) Jadi perbedaan antara lebar saat ini dan lebar yang diharapkan adalah
4) Sekarang sesuaikan insets (dalam contoh ini kita menambahkannya ke kanan, sehingga posisi kiri dari koleksi koleksi tetap sama
sumber
Saya memiliki horisontal
UICollectionView
dan subkelasUICollectionViewFlowLayout
. Tampilan koleksi memiliki sel besar, dan hanya menampilkan satu baris pada satu waktu, dan tampilan koleksi sesuai dengan lebar layar.Saya mencoba jawaban iago849 dan berhasil, tetapi kemudian saya tahu bahwa saya bahkan tidak memerlukan jawabannya. Untuk beberapa alasan, pengaturan
minimumInterItemSpacing
tidak melakukan apa-apa. Jarak antara item / sel saya dapat sepenuhnya dikendalikan olehminimumLineSpacing
.Tidak yakin mengapa ini bekerja seperti ini, tetapi berhasil.
sumber
Saya menemukan masalah serupa dengan OP. Sayangnya jawaban yang diterima tidak berfungsi untuk saya karena konten
collectionView
tidak akan terpusat dengan benar. Oleh karena itu saya datang dengan solusi yang berbeda yang hanya mensyaratkan bahwa semua item dalamcollectionView
adalah dari lebar yang sama , yang tampaknya menjadi kasus dalam pertanyaan:Kode itu akan memastikan bahwa nilai yang dikembalikan oleh
...minimumInteritemSpacing...
akan menjadi jarak yang tepat antara setiapcollectionViewCell
dan selanjutnya menjamin bahwa sel-sel bersama-sama akan dipusatkan dicollectionView
sumber
The atas solusi oleh Vojtech-vrbka sudah benar, tetapi itu memicu peringatan:
Kode berikut harus memperbaikinya:
sumber
Versi Swift 3
Cukup buat subclass UICollectionViewFlowLayout dan rekatkan metode ini.
sumber
Saya sudah mencoba jawaban iago849 dan berhasil.
Cepat 4
Inilah tautan untuk proyek github. https://github.com/vishalwaka/MultiTags
sumber
Versi sebelumnya tidak benar-benar berfungsi dengan bagian> 1. Jadi solusi saya ditemukan di sini https://codentrick.com/create-a-tag-flow-layout-with-uicollectionview/ . Untuk yang malas:
sumber
Saya memiliki masalah dengan jawaban yang diterima, jadi saya memperbaruinya, ini berfungsi untuk saya:
.h
.m
sumber
Solusi saya dalam
Swift 3
spasi garis sel seperti di Instagram:Cara mendeteksi perangkat terprogram: https://stackoverflow.com/a/26962452/6013170
sumber
Nah, jika Anda membuat tampilan kumpulan horizontal maka untuk memberi ruang di antara sel, Anda perlu mengatur properti
minimumLineSpacing
.sumber
Cobalah bermain-main dengan metode ini:
sumber