Saya punya UICollectionView
dengan UICollectionViewFlowLayout
, dan saya ingin menghitung ukuran isinya (untuk pengembalian intrinsicContentSize
diperlukan untuk menyesuaikan ketinggiannya melalui AutoLayout).
Masalahnya adalah: Bahkan jika saya memiliki tinggi yang tetap dan sama untuk semua sel, saya tidak tahu berapa banyak "baris" / baris yang saya miliki di UICollectionView
. Saya juga tidak dapat menentukan jumlah itu dengan jumlah item di sumber data saya, karena sel yang mewakili item data memiliki lebar yang bervariasi, begitu juga dengan jumlah item yang saya miliki dalam satu baris UICollectionView
.
Karena saya tidak dapat menemukan petunjuk tentang topik ini di dokumentasi resmi dan googling tidak membawa saya lebih jauh, bantuan dan ide apa pun akan sangat dihargai.
sumber
Jika Anda menggunakan tata letak Otomatis , Anda dapat membuat subkelas
UICollectionView
Jika Anda menggunakan kode di bawah ini, Anda tidak perlu menentukan batasan ketinggian apa pun untuk tampilan koleksi karena ini akan bervariasi berdasarkan konten tampilan koleksi.
Diberikan di bawah ini adalah implementasinya:
sumber
Di
viewDidAppear
Anda bisa mendapatkannya dengan:Mungkin pada saat reload data perlu menghitung ketinggian baru dengan data baru maka bisa didapatkan dengan cara: add observer to listening setelah
CollectionView
selesai reload data diviewdidload
:Kemudian tambahkan fungsi di bawah untuk mendapatkan ketinggian baru atau lakukan apa saja setelah collectionview selesai memuat ulang:
Dan jangan lupa untuk menghapus pengamat:
sumber
pengguna1046037 jawaban di Swift ...
sumber
UILabel
atas, konten daricollectionView
melewati elemen lain di atas, apakah Anda punya solusi lain?Kode Swift 3 untuk jawaban pengguna1046037
sumber
Cepat 4
sumber
Swift 4.2.0
sumber
Sudah terlambat untuk menjawab pertanyaan ini tetapi saya baru saja membahas masalah ini.
@ lee jawaban di atas banyak membantu saya untuk mendapatkan jawaban saya. Tetapi jawaban itu terbatas pada tujuan-c dan saya bekerja dengan cepat .
@lee Dengan mengacu pada jawaban Anda, izinkan saya untuk membiarkan pengguna cepat menyelesaikan masalah ini dengan mudah. Untuk itu, ikuti langkah-langkah di bawah ini:
Deklarasikan
CGFloat
variabel di bagian deklarasi:Di
viewDidAppear
Anda bisa mendapatkannya dengan:Mungkin ketika Anda
reload
data kemudian perlu menghitung ketinggian baru dengan data baru maka Anda bisa mendapatkannya dengan cara:addObserver
untuk mendengarkan ketika AndaCollectionView
selesai memuat ulang data diviewWillAppear
:Kemudian tambahkan fungsi di bawah untuk mendapatkan ketinggian baru atau melakukan apapun setelah
collectionview
selesai memuat ulang:Dan jangan lupa untuk menghapus pengamat:
Saya harap ini akan membantu Anda menyelesaikan masalah Anda dengan cepat.
sumber
Jawaban ini didasarkan pada @Er. Jawaban Vihar. Anda dapat dengan mudah menerapkan solusi dengan menggunakan RxSwift
sumber
Versi cepat dari @ user1046037:
sumber
Swift 4.2, Xcode 10.1, iOS 12.1:
Untuk beberapa alasan,
collectionView.contentSize.height
tampak lebih kecil dari ketinggian yang diselesaikan dari tampilan koleksi saya. Pertama, saya menggunakan batasan tata letak otomatis yang relatif terhadap 1/2 dari tinggi tampilan super. Untuk mengatasinya, saya mengubah batasan menjadi relatif terhadap "area aman" tampilan.Ini memungkinkan saya untuk menyetel tinggi sel untuk mengisi tampilan koleksi saya menggunakan
collectionView.contentSize.height
:Sebelum
Setelah
sumber
dengan asumsi collectionView Anda dinamai collectionView, Anda bisa mengukur tingginya sebagai berikut.
sumber
Selain itu, Anda sebaiknya menelepon
reloadData
sebelum mendapatkan ketinggian:sumber