Existe alguma maneira de adicionar espaçamento entre eles UITableViewCell
?
Eu criei uma tabela e cada célula contém apenas uma imagem. A imagem é atribuída à célula assim:
cell.imageView.image = [myImages objectAtIndex:indexPath.row];
mas isso faz com que a imagem seja ampliada e ajustada à célula inteira, e não há espaçamento entre as imagens.
Ou, digamos assim, a altura da imagem é, por exemplo, 50, e eu quero adicionar 20 espaçamentos entre as imagens. Existe alguma maneira de conseguir isso?
ios
objective-c
uitableview
saili
fonte
fonte
Respostas:
Versão rápida
Atualizado para o Swift 3
Essa resposta é um pouco mais geral do que a pergunta original para o futuro dos espectadores. É um exemplo suplementar ao exemplo básico de UITableView para Swift .
Visão geral
A idéia básica é criar uma nova seção (em vez de uma nova linha) para cada item da matriz. As seções podem ser espaçadas usando a altura do cabeçalho da seção.
Como fazer isso
Configure seu projeto conforme descrito no exemplo UITableView para Swift . (Ou seja, adicione um
UITableView
e conecte atableView
tomada ao View Controller).No Interface Builder, altere a cor de fundo da vista principal para azul claro e a
UITableView
cor de fundo para limpar.Substitua o código ViewController.swift pelo seguinte.
ViewController.swift
Observe que
indexPath.section
é usado em vez deindexPath.row
obter os valores adequados para os elementos da matriz e as posições de toque.Como você conseguiu espaço / preenchimento extra à direita e à esquerda?
Entendi da mesma maneira que você adiciona espaçamento a qualquer visualização. Eu usei restrições de layout automático. Basta usar a ferramenta pin no Interface Builder para adicionar espaçamento para as restrições iniciais e finais.
fonte
numberOfSectionsInTableView
ereturn 1
para o número de linhas. Em seguida, useindexPath.section
para obter o índice de células atual. Tente uma vez. Acho que você descobrirá que não precisa fazer muitas alterações na sua configuração atual. Definitivamente, é mais fácil do que subclassificar.layer
manipulações muito rápidas. Você está dizendo isso porque percebeu um impacto no desempenho ou como uma boa prática geral? Mesmo se você configurá-los em um XIB, eles ainda deverão ser configurados quando a célula for criada.Minha solução fácil usando o Swift :
Resultado
fonte
super.layoutSubviews()
primeiro para garantir que toda a exibição fosse apresentada corretamente antes de definir seu quadro.didSet
aselected
variável e ligar paralayoutSubviews()
dentro!A maneira como consigo adicionar espaçamento entre células é fazer numberOfSections = "Your array count" e fazer com que cada seção contenha apenas uma linha. E então defina headerView e sua altura.
fonte
Eu precisava fazer o mesmo conceito de ter UITableCells com um "espaço" entre eles. Como você não pode literalmente adicionar espaço entre as células, pode falsificá-lo, manipulando a altura da célula do UITableView e adicionando uma UIView ao contentView da sua célula. Aqui está uma captura de tela de um protótipo que fiz em outro projeto de teste quando simulava isso:
Aqui está um código (Nota: existem muitos valores codificados para fins de demonstração)
Primeiro, eu precisava definir o
heightForRowAtIndexPath
para permitir diferentes alturas no UITableViewCell.Em seguida, quero manipular a aparência do UITableViewCells para fazer isso no
willDisplayCell:(NewsUITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
métodoObserve que eu criei minha altura whiteRoundedCornerView 70.0 e é isso que causa o espaço simulado porque a altura da célula é realmente 80.0, mas meu contentView é 70.0, o que lhe dá a aparência.
Pode haver outras maneiras de conseguir isso ainda melhor, mas é exatamente como eu descobri como fazê-lo. Espero que possa ajudar outra pessoa.
fonte
Você terá que definir o quadro para a sua imagem. O código não testado é
fonte
layoutSubviews
se você está extendendoUITableViewCell
UITableViewCell
para obter o resultado que preciso :) ... SubclassificaçãoUITableViewCell
é muito comum.UITableViewCell
. Ao criar um costume,UITableViewCells
você deve estar subclassificandoUITableViewCell
.Eu estava no mesmo barco. No começo, tentei mudar para as seções, mas, no meu caso, acabou sendo mais uma dor de cabeça do que eu pensava inicialmente, então procurei uma alternativa. Para continuar usando linhas (e não mexer em como você acessa os dados do modelo), eis o que funcionou para mim usando uma máscara :
Tudo o que você precisa fazer é aumentar a altura da célula com o mesmo valor desejado
verticalPadding
e, em seguida, modificar seu layout interno para que todas as visualizações com espaçamento nas bordas da célula tenham o mesmo espaçamento aumentadoverticalPadding/2
. Menor desvantagem: você recebeverticalPadding/2
preenchimento na parte superior e inferior do tableView, mas pode corrigi-lo rapidamente, definindotableView.contentInset.bottom = -verticalPadding/2
etableView.contentInset.top = -verticalPadding/2
. Espero que isso ajude alguém!fonte
Eu acho que a solução mais direta, se você está procurando um pouco de espaço e provavelmente menos caro, seria simplesmente definir a cor da borda da célula para a cor de fundo das tabelas e definir a largura da borda para obter o resultado desejado!
fonte
Se você ainda não estiver usando cabeçalhos (ou rodapés) de seção, poderá usá-los para adicionar espaçamento arbitrário às células da tabela. Em vez de ter uma seção com n linhas, crie uma tabela com n seções com uma linha cada.
Implemente o
tableView:heightForHeaderInSection:
método para controlar o espaçamento.Você também pode implementar
tableView:viewForHeaderInSection:
para controlar a aparência do espaçamento.fonte
Eu resolvi dessa maneira no Swift 4.
Crio uma extensão do UITableViewCell e incluo este código:
Espero que ajude você.
fonte
Exemplo no rápido 3 ..
ver código do controlador é abaixo como
func numberOfSections (em tableView: UITableView) -> Int {retornar arraytable.count}
Faça o download do código-fonte completo para o Github: link
https://github.com/enamul95/CustomSectionTable
fonte
Posso pensar em três abordagens:
Crie uma célula de tabela personalizada que expanda a exibição de toda a célula da maneira que você deseja
Em vez de adicionar a imagem à visualização de imagem, limpe as subvisões da visualização de imagem, crie uma visualização personalizada que adicione um UIImageView para a imagem e outra, talvez uma UIView simples que forneça o espaçamento desejado e adicione-a como uma subvisualização de a visualização da imagem.
Isso faz sentido?
fonte
Sim, você pode aumentar ou diminuir o espaçamento (preenchimento) entre duas células, criando uma exibição base na exibição de conteúdo na célula. Defina cores claras para o plano de fundo da exibição de conteúdo e ajuste a altura da exibição base para criar espaço entre as células.
fonte
Com base na resposta de Husam: Usar a camada de célula em vez da exibição de conteúdo permite adicionar uma borda em torno de toda a célula e do acessório, se necessário. Esse método requer um ajuste cuidadoso das restrições inferiores da célula e das inserções, caso contrário a visualização não será adequada.
fonte
Alterar o número de linhas na seção para 1 Você alterou o número de seções em vez do número de linhas
Aqui você coloca espaçamento entre linhas
fonte
Eu acho que esta é a solução mais limpa:
fonte
layoutMargins
dessa maneira. Talvez porque eu esteja usando o autolayout.Este artigo ajudou, é basicamente o que as outras respostas disseram, mas resumem e são concisas
https://medium.com/@andersongusmao/left-and-right-margins-on-uitableviewcell-595f0ba5f5e6
Nele, ele apenas os aplica nos lados esquerdo e direito, mas o
UIEdgeInsetsMake
init permite adicionar preenchimento aos quatro pontos.Observe que UIEdgeInsets também pode ser usado para obter o mesmo.
Xcode 9.3 / Swift 4
fonte
Não é necessário o uso de várias seções diferentes. As outras respostas usam inserções de quadro e CGRect e camadas e ... BLAH. Não é bom; use o layout automático e um UITableViewCell personalizado. Nesse UITableViewCell, em vez de sub-visualizar seu conteúdo dentro do contentView, crie um novo containerView (um UIView), sub-visualize a visualização do contêiner dentro do contentView e sub-visualize todas as suas visualizações na visualização do contêiner.
Para fazer o espaçamento agora, basta editar as margens do layout da exibição do contêiner, da seguinte maneira:
fonte
Tente pesquisar em - (UIEdgeInsets) layoutMargins; na célula
fonte
Minha situação foi que eu usei o UIView personalizado para viewForHeader na seção também heightForHeader na seção return constant height, digamos 40, problema foi quando não há dados, todas as visualizações de cabeçalho foram tocadas entre si. então eu queria espaço entre a seção na ausência de dados, então eu corrigi apenas alterando o plano "tableview style" para "Group" .e funcionou para mim.
fonte
Confira minha solução no GitHub com subclassificação
UITableView
e uso dos recursos de tempo de execução do Objective-C.Basicamente, ele usa a estrutura de dados privada da Apple
UITableViewRowData
que eu procurei no cabeçalho de tempo de execução privadoUITableView
:https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableView.h ,
e aqui está a classe privada desejada que contém tudo o que você precisa para planejar o espaçamento das células, da maneira que desejar, sem defini-las nas classes das células:
https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableViewRowData.h
fonte
Eu estava tendo problemas para que isso funcionasse ao lado das cores de plano de fundo e das visualizações acessórias na célula. Acabou tendo que:
1) Defina a propriedade de exibição de plano de fundo das células com um UIView definido com uma cor de plano de fundo.
2) Reposicione essa exibição em layoutSubviews para adicionar a ideia de espaçamento
fonte
Usar os cabeçalhos como espaçamento funcionaria bem, acho que se você não quiser usar nenhum cabeçalho. Caso contrário, provavelmente não é a melhor ideia. O que estou pensando é criar uma exibição de célula personalizada.
Exemplos:
Na célula personalizada, faça uma visualização em segundo plano com restrições para que não preencha a célula inteira, forneça algum preenchimento.
Em seguida, torne o fundo da tableview invisível e remova os separadores:
fonte
Se você não deseja alterar o número da seção e da linha da sua exibição de tabela (como eu fiz), aqui está o que você faz:
1) Adicione um ImageView na parte inferior da visualização da célula da tabela.
2) Crie a mesma cor da cor de fundo da exibição da tabela.
Eu fiz isso no meu aplicativo e funciona perfeitamente. Felicidades! : D
fonte
SWift-5, espaçamento entre UITableViewCell
fonte
Você pode simplesmente usar restrições em códigos como este:
é importante adicionar subview (contêiner) e colocar outros elementos nele.
fonte
Solução Swift 5.0
Dentro da subclasse UITableViewCell
fonte
adicione uma visualização interna à célula e adicione suas próprias visualizações.
fonte
Use UITableViewDelegate
heightForRowAtIndexPath
e retorne a altura da linha.fonte