Use este método para definir a largura da altura da célula personalizada.
Certifique-se de adicionar estes protocolos
UICollectionViewDelegate
UICollectionViewDataSource
UICollectionViewDelegateFlowLayout
Se você estiver usando rápida 5 ou xcode 11 e, posteriormente, você precisa definir Estimate Size
a none
usar storyboard, a fim de fazê-lo funcionar corretamente. Se você não definir isso, o código abaixo não funcionará conforme o esperado.
Swift 4 ou posterior
extension YourViewController: UICollectionViewDelegate {
//Write Delegate Code Here
}
extension YourViewController: UICollectionViewDataSource {
//Write DataSource Code Here
}
extension YourViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: screenWidth, height: screenWidth)
}
}
Objective-C
@interface YourViewController : UIViewController<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame)));
}
Certifique-se de adicionar o protocolo
UICollectionViewDelegateFlowLayout
em suaclass
declaraçãofonte
Se alguém estiver usando storyboard e substituindo UICollectionViewDelegateFlowLayout , em swift 5 e Xcode 11 também defina o tamanho da estimativa como Nenhum
fonte
UICollectionViewFlowLayout
parece ser o padrãoestimatedItemSize
aoUICollectionViewFlowLayout.automaticSize
usar o IB, embora a documentação diga que deveriaCGSizeZero
. Como afirma a Apple,automaticSize
"habilita células autodimensionadas para a visualização de sua coleção". É por isso que outras alterações de tamanho no IB não fazem nada.Finalmente obtive a resposta. Você deve estender
UICollectionViewDelegateFlowLayout
Isso deve estar funcionando com as respostas acima.
fonte
Você tem 2 maneiras de alterar o tamanho de CollectionView.
Primeira forma -> adicione este protocolo UICollectionViewDelegateFlowLayout
para No meu caso, quero dividir a célula em 3 partes em uma linha. Eu fiz este código abaixo
Segunda forma -> você não precisa adicionar UICollectionViewDelegateFlowLayout, mas precisa escrever algum código na função viewDidload em vez de como código abaixo
O que quer que você escreva um código como a primeira ou segunda maneira, você obterá o mesmo resultado acima. Eu escrevi. Funcionou para mim
fonte
Proporção de tamanho de acordo com o tamanho do iPhone:
Aqui está o que você pode fazer para ter diferentes larguras e alturas para as células em relação ao tamanho do iPhone:
E talvez você também deva desabilitar suas restrições de AutoLayout na célula para que essa resposta funcione.
fonte
A visualização da coleção possui um objeto de layout . No seu caso, provavelmente é um layout de fluxo ( UICollectionViewFlowLayout ). Defina a
itemSize
propriedade do layout de fluxo .fonte
em Swift3 e Swift4 você pode alterar o tamanho da célula adicionando UICollectionViewDelegateFlowLayout e implementando assim:
ou se criar UICollectionView programaticamente, você pode fazer assim:
fonte
swift4 swift 4 ios coleção ver exemplo de coleção ver exemplo de xcode último código de trabalho
Adicione isto na seção Delegado do topo
UICollectionViewDelegateFlowLayout
e usar esta função
///// amostra de código completo
criar na visualização da coleção e a célula da visualização da coleção no storyboard dão referência à coleção como
@IBOutlet fraco var cvContent: UICollectionView!
cole isso no controlador de visualização
fonte
Experimente o método abaixo
fonte
Swift 5 programaticamente
fonte
fonte
2020, maneira absolutamente simples:
Você deve adicionar "UICollectionViewDelegateFlowLayout" ou não há preenchimento automático:
Digite "sizeForItemAt ...". Você Terminou!
É isso aí.
Exemplo, se você quiser "cada célula preenche a visualização da coleção inteira":
fonte
Outra maneira é definir o valor diretamente no layout de fluxo
fonte
Portanto, você precisa definir a partir do storyboard para o atributo para collectionView na seção de célula, estimar o tamanho para nenhum, e em seu ViewController você precisa ter um método delegado para implementar este método:
optional func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
fonte
Tente usar o método UICollectionViewDelegateFlowLayout. No Xcode 11 ou posterior, você precisa definir o tamanho estimado para nenhum no storyboard.
fonte
Uma maneira simples:
Se você só precisa de um tamanho fixo simples :
Isso é tudo que há para fazer.
No storyboard, basta alterar a classe de UICollectionView para SizedCollectionView.
Mas !!!
Observe que a classe base é "UI 'I' CollectionView". 'I' para inicializador.
Não é tão fácil adicionar um inicializador a uma visão de coleção. Esta é uma abordagem comum:
Visualização da coleção ... com inicializador:
Na maioria dos projetos, você precisa de "uma visão de coleção com um inicializador". Portanto, você provavelmente terá
UIICollectionView
(observe o I extra para Initializer!) Em seu projeto.fonte
Swift 5, configuração de UICollectionView programática Largura e altura da célula
fonte
Esta é a minha versão, encontre sua proporção adequada para obter o tamanho da célula de acordo com sua necessidade.
fonte