Estou usando atualmente UICollectionView
para a grade de interface do usuário e funciona bem. No entanto, gostaria de habilitar a rolagem horizontal. A grade suporta 8 itens por página e quando o número total de itens é, digamos 4, é assim que os itens devem ser organizados com a direção de rolagem horizontal ativada:
0 0 x x
0 0 x x
Aqui 0 -> Item de coleção ex -> Células vazias
Existe uma maneira de torná-los alinhados ao centro como:
x 0 0 x
x 0 0 x
Para que o conteúdo fique mais limpo?
Além disso, o arranjo abaixo também pode ser uma solução que estou esperando.
0 0 0 0
x x x x
fonte
minimumInteritemSpacing
indica apenas o mínimo.return UIEdgeInsetsMake(0, 100, 0, 100);
. Se houver espaço extra, a visualização da coleção irá expandir o espaçamento provisório, então você precisa ter certeza de LeftInset + CellWidth * Ncells + CellSpacing * (Ncells-1) + RightInset = CollectionViewWidthPara aqueles que procuram uma solução para células de visualização de coleção de largura dinâmica e alinhadas ao centro , como eu estava, acabei modificando a resposta de Angel para uma versão alinhada à esquerda para criar uma subclasse alinhada ao centro para
UICollectionViewFlowLayout
.CenterAlignedCollectionViewFlowLayout
fonte
guard let superArray = super.layoutAttributesForElementsInRect(rect) else { return nil } guard let attributes = NSArray(array: superArray, copyItems: true) as? [UICollectionViewLayoutAttributes] else { return nil }
interItemSpacing
para usar o padrãominimumInteritemSpacing
.As principais soluções aqui não funcionaram para mim prontamente, então eu vim com isso que deve funcionar para qualquer exibição de coleção de rolagem horizontal com layout de fluxo e apenas uma seção:
fonte
É fácil calcular inserções dinamicamente, este código sempre centralizará suas células:
fonte
Semelhante a outras respostas, esta é uma resposta dinâmica que deve funcionar para células de tamanho estático. A única modificação que fiz foi colocar o enchimento em ambos os lados. Se eu não fizesse isso, tive problemas.
Objective-C
Rápido
Além disso, se ainda estiver tendo problemas, certifique-se de definir os valores
minimumInteritemSpacing
eminimumLineSpacing
com os mesmos, pois esses valores parecem estar relacionados.fonte
Coloque isso em seu delegado de visualização de coleção. Ele considera mais as configurações básicas do layout de fluxo do que as outras respostas e, portanto, é mais genérico.
versão rápida (obrigado g0ld2k):
fonte
totalCellWidth
deveria estarcellWidth*cellCount + spacing*(cellCount-1)
.Minha solução para células de visualização de coleção de tamanho estático que precisam ter preenchimento à esquerda e à direita
fonte
Eu tenho uma barra de tags em meu aplicativo que usa um
UICollectionView
&UICollectionViewFlowLayout
, com uma linha de células alinhada ao centro.Para obter o recuo correto, você subtrai a largura total de todas as células (incluindo o espaçamento) da largura da sua
UICollectionView
e divide por dois.O problema é esta função -
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
é chamado antes ...
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
... então você não pode iterar em suas células para determinar a largura total.
Em vez disso, você precisa calcular a largura de cada célula novamente, no meu caso eu uso,
[NSString sizeWithFont: ... ]
pois as larguras das minhas células são determinadas pelo próprio UILabel.fonte
interSpacing
?interSpacing
é apenas uma constante em meu código, que determina o espaço que tenho entre UICollectionViewCellsNo Swift, o seguinte distribuirá as células uniformemente, aplicando a quantidade correta de preenchimento nas laterais de cada célula. Claro, você precisa saber / definir a largura da sua célula primeiro.
fonte
Swift 2.0 funciona bem para mim!
Onde: screenWight : basicamente é a largura da minha coleção (largura da tela inteira) - Fiz constantes: let screenWight: CGFloat = UIScreen.mainScreen (). Bounds.width porque self.view.bounds mostra 600 a cada vez - por causa dos elementos SizeClasses - matriz de células 50 - minha largura manual de célula 10 - minha distância entre as células
fonte
Você pode usar https://github.com/keighl/KTCenterFlowLayout assim:
fonte
Não tenho certeza se isso é novo no Xcode 5 ou não, mas agora você pode abrir o Inspetor de tamanho por meio do Interface Builder e definir uma inserção lá. Isso evitará que você tenha que escrever um código personalizado para fazer isso para você e deve aumentar drasticamente a velocidade com que você encontra os deslocamentos adequados.
fonte
Outra maneira de fazer isso é definir o
collectionView.center.x
, assim:Neste caso, apenas respeitando o inset certo que funciona para mim.
fonte
Com base na resposta do usuário 3676011, posso sugerir um mais detalhado com uma pequena correção. Esta solução funciona muito bem no Swift 2.0 .
Houve um problema em
onde deve ser
-1
mencionado adicional .fonte
Foi assim que obtive uma visão da coleção alinhada ao centro com um espaçamento fixo entre os itens
fonte
Versão de trabalho da resposta Objective C do kgaidis usando Swift 3.0:
fonte
Aqui está minha solução com algumas suposições:
Sinta-se à vontade para se adaptar às suas necessidades.
Layout centralizado com largura de célula variável:
Resultado:
fonte
Aqui está como você pode fazer isso e funciona bem
fonte