Jak zauważyło (wiele) innych, możesz łatwo ukryć wszystkie separatory UITableViewCell, po prostu wyłączając je dla całego samego UITableView; np. w twoim UITableViewController
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
Niestety, to jest prawdziwa PITA do zrobienia na komórkę , o co tak naprawdę pytasz.
Osobiście próbowałem wielu permutacji zmiany cell.separatorInset.left, jak sugerują (wielu) inni, ale problemem jest cytowanie Apple (wyróżnienie dodane):
„ ... Można wykorzystać tę właściwość, aby dodać przestrzeń między bieżącą komórką za treści i po lewej i prawej krawędzi stołu. Wartości wpuszczanym dodatnie przesuwają zawartość komórek i separator komórek wewnątrz i od krawędzi stole ... ”
Jeśli więc spróbujesz „ukryć” separator, odsuwając go poza ekran w prawo, możesz skończyć również wcięciem zawartości komórki. Jak sugeruje crifan, możesz następnie spróbować zrekompensować ten paskudny efekt uboczny poprzez ustawienie cell.indentationWidthi cell.indentationLevelodpowiednie cofnięcie wszystkiego, ale uważam, że jest to również niewiarygodne (treść wciąż się wcina ...).
Najbardziej niezawodny sposób, jaki znalazłem, to przesadzenie layoutSubviewsw prostej podklasie UITableViewCell i ustawienie prawej wstawki tak, aby uderzała w lewą wstawkę, dzięki czemu separator ma szerokość 0 i jest tak niewidoczny [należy to zrobić w widoku układu, aby automatycznie obroty uchwytu]. Dodam również metodę wygody do mojej podklasy, aby ją włączyć.
@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
Zastrzeżenie: nie ma niezawodnego sposobu na przywrócenie oryginalnej wstawki, więc nie można „odblokować” separatora, dlatego używam nieodwracalnej hideSeparatormetody (w przeciwieństwie do odsłonięcia separatoraIsHidden). Uwaga: separatorInset utrzymuje się w ponownie używanych komórkach, więc ponieważ nie możesz „odblokować”, musisz trzymać te komórki separatora ukryte w swoim własnym identyfikatorze ponownego użycia.