Jadi saya sudah melalui berbagai posting tentang menambahkan tampilan ke-2 untuk menambahkan bayangan, tetapi saya masih tidak bisa membuatnya berfungsi jika saya ingin menambahkannya UICollectionViewCell
. Saya membuat subkelas UICollectionViewCell
, dan inilah kode saya di mana saya menambahkan berbagai elemen UI ke tampilan konten sel dan menambahkan bayangan ke lapisan:
[self.contentView setBackgroundColor:[UIColor whiteColor]];
self.layer.masksToBounds = NO;
self.layer.shadowOffset = CGSizeMake(0, 1);
self.layer.shadowRadius = 1.0;
self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowOpacity = 0.5;
[self.layer setShadowPath:[[UIBezierPath bezierPathWithRect:self.bounds] CGPath]];
Saya ingin tahu bagaimana cara menambahkan sudut bulat dan bayangan UICollectionViewCell
.
iphone
ios
uicollectionviewcell
Vincent Yiu
sumber
sumber
Jawaban:
Tak satu pun dari solusi ini berhasil untuk saya. Jika Anda menempatkan semua subview Anda ke dalam tampilan konten UICollectionViewCell, yang mungkin memang Anda lakukan, Anda dapat menyetel bayangan pada lapisan sel dan batas pada lapisan contentView untuk mencapai kedua hasil.
Swift 3.0.0
sumber
cell.layer.backgroundColor = [UIColor clearColor].CGColor;
Versi Swift 3:
sumber
Jika ini membantu: Berikut kecepatan untuk membulatkan sudut:
dengan sel menjadi variabel yang mengontrol sel: sering kali, Anda akan menggunakan ini di
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
Nikmati!
sumber
Berikut solusi Swift 4 , diperbarui ke setiap sudut dan tidak hanya sudut atas:
sumber
Tetapkan
layer
atribut untuk sel, bukancontentView
.sumber
SWIFT 4.2
Seseorang harus menambahkan ini di sel kustom Anda atau cellForItemAt: Jika Anda menggunakan cellForItemAt: pendekatan substitusi self -> sel
Ini akan memberi Anda sel dengan tepi bulat dan bayangan jatuh.
sumber
Inilah jawaban saya, mendekati yang lain, tetapi saya menambahkan radius sudut ke lapisan jika tidak sudut tidak akan terisi dengan benar. Juga, ini membuat ekstensi kecil yang bagus
UICollectionViewCell
.}
Anda dapat memanggilnya dalam
collectionView(_:cellForItemAt:)
sumber data setelah Anda membatalkan antrean sel Anda.sumber
Anda hanya perlu (a) set
cornerRadius
dan (b) setshadowPath
menjadi persegi bulat dengan radius yang sama seperticornerRadius
:sumber
Saya harus membuat sedikit perubahan untuk Swift :
sumber
Jawaban dari Mike Sabatini berfungsi dengan baik, jika Anda mengonfigurasi properti sel secara langsung di collectionView cellForItemAt, tetapi jika Anda mencoba menyetelnya di awakeFromNib () subkelas UICollectionViewCell kustom, Anda akan diakhiri dengan set bezierPath yang salah pada perangkat yang tidak tidak cocok dengan lebar dan tinggi yang ditetapkan sebelumnya di Storyboard (IB) Anda.
Solusi bagi saya adalah membuat func di dalam subclass UICollectionViewCell dan memanggilnya dari cellForItemAt seperti ini:
Dan di CustomCollectionViewCell.swift:
sumber
Yang ini berhasil untuk saya
sumber
Saya menggunakan metode berikut untuk mencapai efek semacam ini:
sumber
Anda dapat menyetel warna bayangan, radius, dan offset dalam metode UICollectionViewDataSource sambil membuat UICollectionViewCell
sumber
Inilah solusi saya. Ini mirip dengan jawaban lain, dengan satu perbedaan utama. Itu tidak membuat jalur yang bergantung pada batas-batas tampilan. Setiap kali Anda membuat jalur berdasarkan batas dan memberikannya ke lapisan, Anda dapat mengalami masalah saat mengubah ukurannya, dan perlu menyiapkan metode untuk memperbarui jalur.
Solusi yang lebih sederhana adalah menghindari penggunaan apa pun yang bergantung pada batas.
Sekarang ketika ukuran sel berubah, API tampilan akan melakukan semua pekerjaan secara internal.
sumber
Saya menemukan satu hal penting: UICollectionViewCell harus memiliki backgroundColor sebagai
clear
warna untuk membuat ini bekerja di atas.sumber