Como (muchos) otros han señalado, puede ocultar fácilmente todos los separadores UITableViewCell simplemente apagándolos para todo el UITableView; por ejemplo, en su UITableViewController
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
Desafortunadamente, es una verdadera PITA que hacer en una celda , que es lo que realmente está preguntando.
Personalmente, he probado numerosas permutaciones para cambiar el cell.separatorInset.left
, nuevamente, como (muchos) otros han sugerido, pero el problema es, para citar a Apple (énfasis agregado):
" ... Puede usar esta propiedad para agregar espacio entre el contenido de la celda actual y los bordes izquierdo y derecho de la tabla. Los valores de inserción positivos mueven el contenido de la celda y el separador de celda hacia adentro y lejos de los bordes de la tabla ... "
Entonces, si intenta 'ocultar' el separador empujándolo fuera de la pantalla hacia la derecha, también puede terminar sangrando el contenido de su celda también. Según lo sugerido por crifan, puede intentar compensar este desagradable efecto secundario configurando cell.indentationWidth
ycell.indentationLevel
moviendo adecuadamente todo hacia atrás, pero he descubierto que esto tampoco es confiable (el contenido aún se sangra ...).
La forma más confiable que he encontrado es layoutSubviews
anular en una simple subclase UITableViewCell y establecer el recuadro derecho para que golpee el recuadro izquierdo, haciendo que el separador tenga un ancho 0 y tan invisible [esto debe hacerse en layoutSubviews para automáticamente manejar rotaciones]. También agrego un método de conveniencia a mi subclase para activar esto.
@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
Advertencia: no hay una forma confiable de restaurar el recuadro derecho original , por lo que no puede 'des-ocultar' el separador, por lo tanto, estoy usando un hideSeparator
método irreversible (en lugar de exponer separatorIsHidden). Tenga en cuenta que el separatorInset persiste en las celdas reutilizadas, por lo que, debido a que no puede 'des-ocultar', debe mantener estas celdas separadoras ocultas aisladas en su propio reuseIdentifier.