Já passei por várias postagens sobre como adicionar uma 2ª visualização para adicionar sombra, mas ainda não consigo fazê-lo funcionar se quiser adicioná-lo UICollectionViewCell
. Eu criei uma subclasse UICollectionViewCell
e aqui está meu código onde adiciono vários elementos de IU à visualização do conteúdo da célula e adiciono sombra à camada:
[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]];
Gostaria de saber como adicionar cantos arredondados e sombras UICollectionViewCell
.
iphone
ios
uicollectionviewcell
Vincent Yiu
fonte
fonte
Respostas:
Nenhuma dessas soluções funcionou para mim. Se você colocar todas as suas subvisualizações na visão de conteúdo UICollectionViewCell, o que provavelmente é, você pode definir a sombra na camada da célula e a borda na camada de contentView para obter os dois resultados.
Swift 3.0
fonte
cell.layer.backgroundColor = [UIColor clearColor].CGColor;
Versão Swift 3:
fonte
Caso ajude: Aqui está a solução para arredondar os cantos:
com a célula sendo uma variável que controla a célula: frequentemente, você vai usar isso em
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
Aproveitar!
fonte
Aqui, a solução Swift 4 , atualizada para arredondar todos os cantos e não apenas os cantos superiores:
fonte
Defina os
layer
atributos da célula, nãocontentView
.fonte
SWIFT 4.2
Deve-se adicionar isso em sua célula ou cellForItemAt customizada: Se você estiver usando cellForItemAt: approach substitute self -> cell
Isso lhe dará uma célula com uma borda arredondada e uma sombra projetada.
fonte
Aqui está minha resposta, perto das outras, mas adiciono um raio de canto à camada, caso contrário, os cantos não serão preenchidos corretamente. Além disso, isso é uma pequena extensão agradável
UICollectionViewCell
.}
Você pode chamá-lo
collectionView(_:cellForItemAt:)
da fonte de dados depois de retirar a fila da célula.fonte
Você simplesmente precisa (a) definir
cornerRadius
e (b) definirshadowPath
como um retângulo arredondado com o mesmo raio decornerRadius
:fonte
Tive que fazer algumas pequenas alterações no Swift :
fonte
A resposta de Mike Sabatini funciona bem, se você configurar as propriedades da célula diretamente em collectionView cellForItemAt, mas se você tentar configurá-las em awakeFromNib () de uma subclasse UICollectionViewCell customizada, você terminará com um bezierPath incorreto configurado nos dispositivos que não não coincidir com a largura e altura previamente definidas em seu Storyboard (IB).
A solução para mim foi criar uma função dentro da subclasse de UICollectionViewCell e chamá-la de cellForItemAt assim:
E no CustomCollectionViewCell.swift:
fonte
Este funcionou para mim
fonte
Eu uso o seguinte método para conseguir esse tipo de efeito:
fonte
Você pode definir a cor da sombra, raio e deslocamento no método UICollectionViewDataSource ao criar um UICollectionViewCell
fonte
Aqui está minha opinião sobre a solução. É semelhante a outras respostas, com uma diferença fundamental. Ele não cria um caminho que depende dos limites da visualização. Sempre que você criar um caminho com base nos limites e fornecê-lo à camada, poderá ter problemas durante o redimensionamento e precisar configurar métodos para atualizar o caminho.
Uma solução mais simples é evitar o uso de qualquer coisa que seja dependente de limites.
Agora, sempre que o tamanho das células mudar, a API de visualização fará todo o trabalho internamente.
fonte
Achei uma coisa importante: o UICollectionViewCell deve ter o backgroundColor como
clear
cor para que funcionem.fonte