Isto está me enlouquecendo! Eu tenho um UICollectionViewController conforme mostrado abaixo:
class PhrasesCompactCollectionViewController: UICollectionViewController
NumberOfSections e cellForItemAt estão sendo chamados, mas sizeForItemAtIndexPath nunca é chamado. Estou usando exatamente o mesmo código em outro lugar e ele dispara corretamente. Estou usando o Xcode 8 Beta 6.
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSize(width: 120, height:120)
}
Em Swift 3+, use este método:
Certifique-se de que sua classe está em conformidade com ambos Delegado
UICollectionViewDelegate
UICollectionViewDelegateFlowLayout
fonte
UICollectionViewDelegate
UICollectionViewController.Eu tive o mesmo problema. A única coisa que me ajudou foi fazer o 'Tamanho estimado' para o tamanho da célula no inspetor de tamanho de collectionView 'Nenhum'.
fonte
sizeForItemAt
não mencionaram isso. Muito útil.sizeForItemAt
funcionou bem até o Xcode 11.4 quando de repente as células estavam com a largura errada. Tentei um monte de coisas e isso finalmente funcionou.Swift 3
Para definir o tamanho da célula de UICollectionView, você precisa criar e personalizar o objeto de
UICollectionViewFlowLayout
. Personalize as propriedades e defina esse objeto de layout para o objeto UICollectionView.Altere os objetos cellheight e cellWidth da célula de acordo com seus requisitos (a altura e largura da célula que você deseja).
Certifique-se: se você adicionou o método sizeForItemAt indexPath, então deve REMOVER o método ...
fonte
Swift 5
Todas essas etapas são necessárias :
UICollectionViewDelegate, UICollectionViewDataSource
collectionView.delegate = self
ecollectionView.dataSource = self
Como :
fonte
A primeira classe precisa confirmar para UICollectionViewDelegateFlowLayout. Então você precisa escrever o seguinte código em viewDidLoad ():
// Para dizer ao UICollectionView para usar os métodos UICollectionViewDelegateFlowLayout do seu UIViewController
// Se você deseja definir seu próprio layout de fluxo de visualização de coleção
Usando este método de código UICollectionViewDelegateFlowLayout
será chamado, você pode definir o tamanho neste método.
fonte
Três coisas que você precisa verificar se nenhuma resposta funcionar:
Implemente o Delegado FlowLayout:
class MyController: UICollectionViewController, UICollectionViewDelegateFlowLayout
Use o método para o tamanho do item para swift 3.0+:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { return CGSize(width: (collectionView.frame.width / 3) - 1, height: collectionView.frame.width) }
Selecione
Estimate size = None
no elemento Inspecionar de UICollectionView.fonte
Eu tive o mesmo problema e nada resolveria. Recebi um aviso amarelo dizendo para torná-lo privado porque se aproximava de outra função definida pelo Delegado de Layout. O que consertou para mim foi:
Observe a diferença de "sizeForItemAtIndexPath" para o "sizeForItemAt" correto.
Eu arranquei meu cabelo por dias tentando descobrir isso e finalmente funcionou. Abaixo, incluirei todas as minhas funções para mostrar como também "escondi" uma célula tornando a altura igual a 0.
fonte
Eu tive esse problema na noite passada. Finalmente resolvi à meia-noite quando percebi que o método 'didSelectItemAtIndex' não estava fechado com um colchete de fechamento "}"
Eu adicionei um colchete de fechamento na parte inferior da classe quando questionado pelo erro de compilação. Portanto, todos os métodos abaixo de 'didSelectItemAtIndex' estavam dentro desse método.
Postando aqui apenas no caso de alguém perder 4 horas de suas noites com este aqui :-(
fonte
Certifique-se de colocá-lo em viewDidLoad ()
fonte
meu problema era que eu tinha meu objeto UICollectionViewDataSource criado como variável local. Portanto, se você inicializar seu objeto dataSource manualmente no código, certifique-se de armazená-lo como uma variável global.
fonte
Use este método
Ao invés de
fonte
Para mim (no Swift 3.1), o método deve ser declarado público assim:
Não se esqueça de torná-lo público .
fonte
public
é o que você usa para tornar seu código acessível entre estruturas e módulos.