Saat ini saya menggunakan UICollectionView
untuk kisi antarmuka pengguna, dan berfungsi dengan baik. Namun, saya ingin mengaktifkan pengguliran horizontal. Grid mendukung 8 item per halaman dan ketika jumlah total item, katakanlah 4, beginilah cara item diatur dengan arah scroll horizontal diaktifkan:
0 0 x x
0 0 x x
Di sini 0 -> Item Koleksi dan x -> Sel Kosong
Apakah ada cara untuk membuatnya rata tengah seperti:
x 0 0 x
x 0 0 x
Agar konten terlihat lebih bersih?
Juga pengaturan di bawah ini mungkin juga menjadi solusi yang saya harapkan.
0 0 0 0
x x x x
minimumInteritemSpacing
hanya menunjukkan minimumnya.return UIEdgeInsetsMake(0, 100, 0, 100);
. Jika ada ruang ekstra, tampilan koleksi akan memperluas jarak sementara, jadi Anda perlu memastikan LeftInset + CellWidth * Ncells + CellSpacing * (Ncells-1) + RightInset = CollectionViewWidthBagi mereka yang mencari solusi untuk sel-sel collectionview selaras tengah dan lebar dinamis , seperti saya, saya akhirnya memodifikasi jawaban Angel untuk versi rata kiri untuk membuat subkelas tengah rata
UICollectionViewFlowLayout
.CenterAlignedCollectionViewFlowLayout
sumber
guard let superArray = super.layoutAttributesForElementsInRect(rect) else { return nil } guard let attributes = NSArray(array: superArray, copyItems: true) as? [UICollectionViewLayoutAttributes] else { return nil }
interItemSpacing
untuk menggunakan defaultminimumInteritemSpacing
.Solusi teratas di sini tidak bekerja untuk saya di luar kotak, jadi saya menemukan ini yang seharusnya berfungsi untuk tampilan koleksi pengguliran horizontal dengan tata letak aliran dan hanya satu bagian:
sumber
Mudah untuk menghitung insets secara dinamis, kode ini akan selalu memusatkan sel Anda:
sumber
Mirip dengan jawaban lain, ini adalah jawaban dinamis yang seharusnya berfungsi untuk sel berukuran statis. Modifikasi yang saya buat adalah saya meletakkan bantalan di kedua sisi. Jika saya tidak melakukan ini, saya mengalami masalah.
Objective-C
Cepat
Selain itu, jika Anda masih mengalami masalah, pastikan Anda menyetel
minimumInteritemSpacing
danminimumLineSpacing
ke nilai yang sama karena nilai ini tampaknya saling terkait.sumber
Masukkan ini ke dalam delegasi tampilan koleksi Anda. Ini mempertimbangkan lebih banyak pengaturan tata letak aliran dasar daripada jawaban lain dan dengan demikian lebih umum.
versi cepat (terima kasih g0ld2k):
sumber
totalCellWidth
seharusnyacellWidth*cellCount + spacing*(cellCount-1)
.Solusi saya untuk sel tampilan koleksi berukuran statis yang perlu memiliki bantalan di kiri dan kanan-
sumber
Saya memiliki bilah tag di aplikasi saya yang menggunakan
UICollectionView
&UICollectionViewFlowLayout
, dengan satu baris sel rata tengah.Untuk mendapatkan indentasi yang benar, Anda mengurangi total lebar semua sel (termasuk spasi) dari lebar Anda
UICollectionView
, dan membaginya dengan dua.Masalahnya adalah fungsi ini -
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
dipanggil sebelumnya ...
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
... jadi Anda tidak bisa mengulang sel Anda untuk menentukan lebar total.
Sebagai gantinya Anda perlu menghitung lebar setiap sel lagi, dalam kasus saya, saya gunakan
[NSString sizeWithFont: ... ]
karena lebar sel saya ditentukan oleh UILabel itu sendiri.sumber
interSpacing
?interSpacing
hanyalah konstanta dalam kode saya, yang menentukan ruang yang saya miliki antara UICollectionViewCellsDi Swift, berikut ini akan mendistribusikan sel secara merata dengan menerapkan jumlah padding yang benar di sisi setiap sel. Tentunya Anda perlu mengetahui / mengatur lebar sel Anda terlebih dahulu.
sumber
Swift 2.0 Bekerja dengan baik untuk saya!
Di mana: screenWight : pada dasarnya adalah lebar koleksi saya (lebar layar penuh) - Saya membuat konstanta: biarkan screenWight: CGFloat = UIScreen.mainScreen (). Bounds.width karena self.view.bounds menunjukkan setiap waktu 600 - karena elemen SizeClasses - array sel 50 - lebar sel manual saya 10 - jarak antar sel saya
sumber
Anda dapat menggunakan https://github.com/keighl/KTCenterFlowLayout seperti ini:
sumber
Tidak yakin apakah ini baru di Xcode 5 atau tidak, tetapi Anda sekarang dapat membuka Size Inspector melalui Interface Builder dan mengatur inset di sana. Itu akan mencegah Anda dari keharusan menulis kode khusus untuk melakukan ini untuk Anda dan harus secara drastis meningkatkan kecepatan di mana Anda menemukan offset yang tepat.
sumber
Cara lain untuk melakukan ini adalah menyetel
collectionView.center.x
, seperti:Dalam hal ini, hanya menghormati inset kanan yang berhasil untuk saya.
sumber
Berdasarkan jawaban pengguna3676011, saya dapat menyarankan yang lebih detail dengan sedikit koreksi. Solusi ini berfungsi dengan baik di Swift 2.0 .
Ada masalah di
di mana harus
-1
disebutkan lebih lanjut.sumber
Ini adalah bagaimana saya memperoleh tampilan koleksi yang sejajar tengah dengan spasi Interitem tetap
sumber
Versi kerja jawaban Objective C kgaidis menggunakan Swift 3.0:
sumber
Inilah solusi saya dengan beberapa asumsi:
Jangan ragu untuk menyesuaikan untuk memenuhi kebutuhan Anda.
Tata letak tengah dengan lebar sel variabel:
Hasil:
sumber
Inilah cara Anda melakukannya dan berfungsi dengan baik
sumber