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.indentationWidth
i cell.indentationLevel
odpowiednie 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 layoutSubviews
w 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 hideSeparator
metody (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.