Wie (viele) andere bereits betont haben, können Sie alle UITableViewCell-Trennzeichen einfach ausblenden, indem Sie sie einfach für die gesamte UITableView selbst deaktivieren. zB in Ihrem UITableViewController
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
Leider ist es eine echte PITA, die pro Zelle durchgeführt werden muss, was Sie wirklich fragen.
Persönlich habe ich zahlreiche Permutationen versucht, das zu ändern cell.separatorInset.left
, wie (viele) andere vorgeschlagen haben, aber das Problem ist, Apple zu zitieren (Hervorhebung hinzugefügt):
" ... Mit dieser Eigenschaft können Sie Platz zwischen dem Inhalt der aktuellen Zelle und dem linken und rechten Rand der Tabelle hinzufügen . Positive Einfügungswerte verschieben den Zelleninhalt und das Zellentrennzeichen nach innen und von den Tabellenkanten weg ... "
Wenn Sie also versuchen, das Trennzeichen zu "verbergen", indem Sie es außerhalb des Bildschirms nach rechts schieben, können Sie am Ende auch die Inhaltsansicht Ihrer Zelle einrücken. Wie von Crifan vorgeschlagen, können Sie dann versuchen, diesen bösen Nebeneffekt zu kompensieren, indem Sie alles einstellen cell.indentationWidth
und cell.indentationLevel
entsprechend zurückschieben, aber ich habe festgestellt, dass dies auch unzuverlässig ist (Inhalte werden immer noch eingerückt ...).
Der zuverlässigste Weg, den ich gefunden habe, besteht darin, layoutSubviews
eine einfache UITableViewCell-Unterklasse zu überschreiben und den rechten Einschub so einzustellen , dass er auf den linken Einschub trifft, sodass das Trennzeichen eine Breite von 0 hat und somit unsichtbar ist [dies muss in layoutSubviews automatisch erfolgen Griffdrehungen]. Ich füge meiner Unterklasse auch eine praktische Methode hinzu, um dies zu aktivieren.
@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
Vorsichtsmaßnahme: Es gibt keine zuverlässige Möglichkeit, den ursprünglichen rechten Einschub wiederherzustellen. Daher können Sie das Trennzeichen nicht "ausblenden", weshalb ich eine irreversible hideSeparator
Methode verwende (im Gegensatz zum Freilegen von TrennzeichenIsHidden). Beachten Sie, dass das separatorInset über wiederverwendete Zellen hinweg bestehen bleibt. Da Sie das Ausblenden nicht aufheben können, müssen Sie diese versteckten Trennzeichenzellen in ihrem eigenen reuseIdentifier isoliert halten.