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
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
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.
@interface MyTableViewCellSubclass()
@property BOOL separatorIsHidden;
@end
@implementation MyTableViewCellSubclass
- (void)hideSeparator
{
_separatorIsHidden = YES;
}
- (void)layoutSubviews
{
[super layoutSubviews];
if (_separatorIsHidden) {
UIEdgeInsets inset = self.separatorInset;
inset.right = self.bounds.size.width - inset.left;
self.separatorInset = inset;
}
}
@end
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.