Estou personalizando a UITableView
. Quero ocultar a linha que separa a última célula ... posso fazer isso?
Eu sei que posso fazer, tableView.separatorStyle = UITableViewCellStyle.None
mas isso afetaria todas as células do tableView. Quero que isso afete apenas meu último celular.
Respostas:
in
viewDidLoad
, adicione esta linha:e em
cellForRowAtIndexPath
:para versões inferiores do iOS
para versões superiores do iOS 7 (incluindo iOS 8)
fonte
[cell.contentView addSubview:line]
vez de[cell addSubview:line]
cellForRowAtIndexPath
. Lembre-se de que as células são reutilizadas. Cada vez que essa célula é reutilizada, você adiciona outra exibição de linha separadora. Em listas grandes, isso pode afetar o desempenho da rolagem. E simplesmente não é o caminho certo para fazê-lo.Você pode usar o seguinte código:
Rápido :
ou:
para Margem padrão:
mostrar separador de ponta a ponta
Objetivo-C:
fonte
UITableView
, enquanto a resposta aceita funciona.self.tableView.separatorColor = [UIColor clearColor];
corrigido.cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width-cell.layoutMargins.left);
se eu não subtrair o valor cell.layoutMargins.left, a linha separadora é desenhada da borda esquerda para a margem esquerda (se houver).textLabel
tela para fora da tela.Para acompanhar a resposta de Hiren .
no ViewDidLoad e a seguinte linha:
Ou, se você estiver usando XIBs ou Storyboards, altere " separador " para " none ":
E no CellForRowAtIndexPath, adicione isso:
Aqui está um exemplo do resultado em que eu exibo uma visualização de tabela com células dinâmicas (mas apenas uma com conteúdo). O resultado é que apenas esse possui um separador e nem todos os "simulados" são adicionados automaticamente para preencher a tela.
Espero que isto ajude.
EDIT: Para aqueles que nem sempre lêem os comentários, na verdade há uma maneira melhor de fazê-lo com algumas linhas de código:
fonte
Se você não quiser desenhar o separador, use o seguinte:
Essa API está disponível apenas a partir do iOS 7.
fonte
separatorInset
Parece para inserir o conteúdo da célula, bem como o separador, o que requer um outro corte para compensar:cell.IndentationWidth = -10000;
separatorInset
0 para superior, esquerda e inferior e a largura da célula para direita:cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width);
isso evita a necessidade de ajustar outras propriedades da célula.meu ambiente de desenvolvimento é
as respostas acima não funcionam totalmente para mim
após a tentativa, minha solução finalmente trabalhando é:
e o efeito é:
fonte
Defina
separatorInset.right = .greatestFiniteMagnitude
no seu celular.fonte
awakeFromNib
pode causar a tela inteira para flash ligadoapplicationDidBecomeActive
No Swift 3, Swift 4 e Swift 5 , você pode escrever uma extensão para o UITableViewCell assim:
Em seguida, você pode usá-lo como abaixo (quando célula é sua instância de célula):
É realmente melhor atribuir a largura da célula de exibição de tabela como inserida à esquerda em vez de atribuir a ela um número aleatório. Como em algumas dimensões da tela, talvez não agora, mas no futuro seus separadores ainda poderão estar visíveis porque esse número aleatório pode não ser suficiente. Além disso, no iPad no modo paisagem, você não pode garantir que seus separadores sejam sempre invisíveis.
fonte
Melhor solução para iOS 7 e 8
Se o seu aplicativo for rotativo - use 3000.0f para inserir à esquerda constante ou calcule-o em tempo real. Se você tentar definir a inserção direita, você terá uma parte visível do separador no lado esquerdo da célula no iOS 8.
fonte
No iOS 7, o separador de células de estilo agrupado UITableView parece um pouco diferente. Parece um pouco com isso:
Tentei a resposta de Kemenaran para fazer isso:
No entanto, isso não parece funcionar para mim. Não sei por que. Decidi usar a resposta de Hiren , mas usando em
UIView
vez deUIImageView
e desenha a linha no estilo do iOS 7:Se você usar isso, certifique-se de conectar a altura correta da visualização da tabela na segunda instrução if. Espero que isso seja útil para alguém.
fonte
Na sua subclasse UITableViewCell, substitua layoutSubviews e oculte o _UITableViewCellSeparatorView. Funciona no iOS 10.
fonte
Não acredito que essa abordagem funcione sob nenhuma circunstância com células dinâmicas ...
Não importa em que método de exibição de tabela você o faça para células dinâmicas, a célula em que você alterou a propriedade inset sempre terá a propriedade inset configurada agora toda vez que for desenfileirada, causando um tumulto nos separadores de linhas ausentes ... Isso é até você mude você mesmo.
Algo assim funcionou para mim:
Dessa forma, você atualiza seu estado da estrutura de dados a cada carregamento
fonte
No Swift usando o iOS 8.4 :
Nota: este trecho acima funcionará no UITableView usando células dinâmicas. O único problema que você pode encontrar é quando você usa células estáticas com categorias, um tipo separador diferente de nenhum e um estilo agrupado para a exibição da tabela. De fato, nesse caso em particular, não ocultará a última célula de cada categoria. Para superar isso, a solução que encontrei foi definir o separador de células (por meio de IB) como nenhum e, em seguida, criar e adicionar manualmente (por meio de código) sua visualização de linha a cada célula. Por exemplo, verifique o snippet abaixo:
fonte
Use esta subclasse, set
separatorInset
não funciona no iOS 9.2.1, o conteúdo seria compactado.https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9
fonte
O muito mais simples e lógico é fazer isso:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [[UIView alloc] initWithFrame:CGRectZero]; }
Na maioria dos casos, você não deseja ver apenas o último separador tableCiewCell. E essa abordagem remove apenas o último separador tableViewCell e você não precisa pensar em problemas de transferência automática (por exemplo, dispositivo rotativo) ou valores de código fixo para configurar inserções de separador.
fonte
Em
willdisplaycell
:fonte
Usando o Swift 3 e adotando o método de hacking mais rápido, você pode melhorar o código usando extensões :
Então, quando você configura a célula:
fonte
fonte
A melhor maneira de conseguir isso é desativar os separadores de linha padrão, subclasse
UITableViewCell
e adicionar um separador de linha personalizado como uma subcontentView
-visualização da - veja abaixo uma célula personalizada usada para apresentar um objeto do tipoSNStock
que possui duas propriedades de sequênciaticker
ename
:Para desativar o separador de linha padrão, use
tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
,. O lado do consumidor é relativamente simples, veja o exemplo abaixo:fonte
Para Swift 2:
adicione a seguinte linha a
viewDidLoad()
:fonte
se a resposta aceita não funcionar, você pode tentar o seguinte:
É ótimo ;)
fonte
Experimente o código abaixo, pode ajudar a resolver seu problema
fonte
fonte
Você precisa pegar a célula personalizada e adicionar Rótulo e definir restrições, como a etiqueta que deve cobrir toda a área da célula. e escreva a linha abaixo no construtor.
Defina também a margem do layout UITableView da seguinte maneira
fonte
Não pude ocultar o separador em uma célula específica, exceto usando a seguinte solução alternativa
fonte
Para iOS7 e superior, a maneira mais limpa é usar o INFINITY em vez do valor codificado. Você não precisa se preocupar em atualizar a célula quando a tela gira.
fonte
Como (muitos) outros já apontaram, você pode ocultar facilmente todos os separadores UITableViewCell simplesmente desativando-os para todo o UITableView; por exemplo, no seu UITableViewController
Infelizmente, é uma PITA real a ser realizada por célula , o que você realmente está perguntando.
Pessoalmente, tentei várias permutações para alterar as
cell.separatorInset.left
, novamente, como (muitas) outras pessoas sugeriram, mas o problema é citar a Apple (ênfase adicionada):" ... Você pode usar esta propriedade para adicionar espaço entre o conteúdo da célula atual e as bordas esquerda e direita da tabela. Valores de inserção positivos movem o conteúdo da célula e o separador de células para dentro e para fora das bordas da tabela ... "
Portanto, se você tentar 'ocultar' o separador empurrando-o para fora da tela para a direita, você também poderá também recuar o contentView do seu celular. Conforme sugerido pelo crifan, você pode tentar compensar esse efeito colateral desagradável definindo
cell.indentationWidth
ecell.indentationLevel
movendo tudo de volta, mas achei que isso também não é confiável (o conteúdo ainda está sendo recuado ...).A maneira mais confiável que eu encontrei é substituir
layoutSubviews
uma subclasse UITableViewCell simples e definir a inserção correta para que ela atinja a inserção esquerda, fazendo com que o separador tenha largura 0 e fique invisível [isso precisa ser feito no layoutSubviews automaticamente lidar com rotações]. Também adiciono um método de conveniência à minha subclasse para ativá-lo.Advertência: não existe uma maneira confiável de restaurar a inserção correta original , então você não pode 'ocultar' o separador, por isso estou usando um
hideSeparator
método irreversível (vs expondo separatorIsHidden). Observe que o separatorInset persiste nas células reutilizadas, portanto, como você não pode "desassociar", é necessário manter essas células separadoras ocultas isoladas em seu próprio reuseIdentifier.fonte
Minha exigência era ocultar o separador entre a quarta e a quinta célula. Eu consegui isso por
fonte
Rápido:
Objetivo-C:
fonte
Dentro da classe de célula do tableview. coloque essas linhas de código
fonte
No iOS9, tive o problema de alterar as inserções do separador também afeta o posicionamento da etiqueta de texto e detalhe.
Eu resolvi isso com isso
fonte