Come (molti) altri hanno sottolineato, è possibile nascondere facilmente tutti i separatori UITableViewCell semplicemente disattivandoli per l'intero UITableView stesso; ad es. nel tuo UITableViewController
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
Sfortunatamente, è un vero PITA da fare su una cellula base , che è quello che stai davvero chiedendo.
Personalmente, ho provato numerose permutazioni di modifica di cell.separatorInset.left
, di nuovo, come (molti) altri hanno suggerito, ma il problema è, per citare Apple (enfasi aggiunta):
" ... È possibile utilizzare questa proprietà per aggiungere spazio tra il contenuto della cella corrente e i bordi sinistro e destro della tabella. I valori di inserimento positivi spostano il contenuto della cella e il separatore di celle verso l'interno e lontano dai bordi della tabella ... "
Quindi, se provi a 'nascondere' il separatore spingendolo fuori dallo schermo a destra, puoi anche rientrare nel rientro del contenuto della tua cella. Come suggerito da Crifan, puoi quindi provare a compensare questo brutto effetto collaterale impostando cell.indentationWidth
ecell.indentationLevel
appropriato spostare tutto indietro, ma ho trovato che anche questo è inaffidabile (il contenuto è ancora indentato ...).
Il modo più affidabile che ho trovato è di scavalcare layoutSubviews
in una semplice sottoclasse UITableViewCell e impostare l' inserzione giusta in modo che colpisca l'inserzione sinistra, rendendo il separatore con larghezza 0 e così invisibile [questo deve essere fatto in layout gestire le rotazioni]. Aggiungo anche un metodo di praticità alla mia sottoclasse per attivarlo.
@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
Avvertenza: non esiste un modo affidabile per ripristinare l' inserto destro originale , quindi non è possibile "nascondere" il separatore, quindi perché sto usando un hideSeparator
metodo irreversibile (rispetto all'esposizione di separatorIsHidden). Notare che il separatorInset persiste tra le celle riutilizzate, quindi, poiché non è possibile "nascondere", è necessario mantenere queste celle con separatore nascosto isolate nel proprio ID riutilizzo.