Więc przejrzałem już różne posty dotyczące dodawania drugiego widoku w celu dodania cienia, ale nadal nie mogę go uruchomić, jeśli chcę go dodać UICollectionViewCell
. Podklasowałem UICollectionViewCell
, a oto mój kod, w którym dodaję różne elementy interfejsu użytkownika do widoku zawartości komórki i dodam cień do warstwy:
[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]];
Chciałbym wiedzieć, jak dodać zaokrąglony narożnik i cień UICollectionViewCell
.
iphone
ios
uicollectionviewcell
Vincent Yiu
źródło
źródło
Odpowiedzi:
Żadne z tych rozwiązań nie zadziałało dla mnie. Jeśli umieścisz wszystkie widoki podrzędne w widoku zawartości UICollectionViewCell, którym prawdopodobnie jesteś, możesz ustawić cień na warstwie komórki i obramowanie na warstwie contentView, aby osiągnąć oba wyniki.
Swift 3.0
źródło
cell.layer.backgroundColor = [UIColor clearColor].CGColor;
Wersja Swift 3:
źródło
Jeśli to pomaga: Oto szybki sposób zaokrąglania rogów:
komórka jest zmienną kontrolującą komórkę: często użyjesz tego w
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
Cieszyć się!
źródło
Tutaj rozwiązanie Swift 4 , zaktualizowane, aby zaokrąglać wszystkie rogi, a nie tylko górne rogi:
źródło
Ustaw
layer
atrybuty komórki, a niecontentView
.źródło
SWIFT 4.2
Należy dodać to w swojej niestandardowej komórce lub cellForItemAt: Jeśli używasz cellForItemAt: approach substitute self -> cell
W ten sposób otrzymasz komórkę z zaokrągloną obwódką i cieniem.
źródło
Oto moja odpowiedź, blisko innych, ale dodaję promień narożnika do warstwy, w przeciwnym razie rogi nie zostaną prawidłowo wypełnione. Jest to również miłe rozszerzenie dla
UICollectionViewCell
.}
Możesz go wywołać w
collectionView(_:cellForItemAt:)
źródle danych po usunięciu komórki z kolejki.źródło
Wystarczy (a) ustawić
cornerRadius
i (b) ustawićshadowPath
zaokrąglony prostokąt o takim samym promieniu jakcornerRadius
:źródło
Musiałem wprowadzić kilka drobnych zmian dla Swift :
źródło
Odpowiedź Mike'a Sabatiniego działa dobrze, jeśli skonfigurujesz właściwości komórki bezpośrednio w collectionView cellForItemAt, ale jeśli spróbujesz ustawić je w awakeFromNib () niestandardowej podklasy UICollectionViewCell, skończysz z niewłaściwym ustawieniem bezierPath na urządzeniach, które nie nie pasują do szerokości i wysokości wcześniej ustawionych w Storyboard (IB).
Rozwiązaniem dla mnie było utworzenie func wewnątrz podklasy UICollectionViewCell i wywołanie jej z komórki cellForItemAt w następujący sposób:
Oraz w CustomCollectionViewCell.swift:
źródło
Ten pracował dla mnie
źródło
Aby osiągnąć taki efekt, używam następującej metody:
źródło
Możesz ustawić kolor cienia, promień i przesunięcie w metodzie UICollectionViewDataSource podczas tworzenia UICollectionViewCell
źródło
Oto moje podejście do rozwiązania. Jest podobny do innych odpowiedzi, z jedną kluczową różnicą. Nie tworzy ścieżki zależnej od granic widoku. Za każdym razem, gdy tworzysz ścieżkę na podstawie granic i udostępniasz ją warstwie, możesz napotkać problemy podczas zmiany rozmiaru i musisz skonfigurować metody aktualizacji ścieżki.
Prostszym rozwiązaniem jest unikanie używania wszystkiego, co jest zależne od granic.
Teraz, gdy rozmiar komórek zmieni się, interfejs API widoku wykona całą pracę wewnętrznie.
źródło
Znalazłem ważną rzecz: UICollectionViewCell musi mieć backgroundColor jako
clear
kolor, aby powyższe działały.źródło