Как отмечали (многие) другие, вы можете легко скрыть все разделители UITableViewCell, просто отключив их для всего UITableView; например, в вашем UITableViewController
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
К сожалению, это настоящая PITA для каждой ячейки , о чем вы действительно просите.
Лично я пробовал многочисленные варианты изменения cell.separatorInset.left
, опять же, как предложили (многие) другие, но проблема в том, чтобы процитировать Apple (выделение добавлено):
« ... Вы можете использовать это свойство, чтобы добавить пространство между содержимым текущей ячейки и левым и правым краями таблицы. Положительные значения вставки перемещают содержимое ячейки и разделитель ячеек внутрь и от краев таблицы ... »
Поэтому, если вы попытаетесь «спрятать» разделитель, переместив его за пределы экрана вправо, вы также можете сделать отступ в тоже самое для contentView вашей ячейки. Как предполагает Crifan, вы можете попытаться компенсировать этот неприятный побочный эффект, установив cell.indentationWidth
иcell.indentationLevel
соответственно переместив все обратно, но я обнаружил, что это также ненадежно (контент по-прежнему получает отступы ...).
Самый надежный способ, который я нашел, это layoutSubviews
переопределить простой подкласс UITableViewCell и установить правую вставку так, чтобы он попадал в левую вставку, делая разделитель равным 0 ширины и таким образом невидимым [это необходимо сделать в layoutSubviews, чтобы автоматически обрабатывать повороты. Я также добавляю удобный метод в свой подкласс, чтобы включить это.
@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
Предостережение: не существует надежного способа восстановить исходную правую вставку, поэтому вы не можете «скрыть» разделитель, поэтому я использую необратимый hideSeparator
метод (против предоставления разделителя IsHidden). Пожалуйста, обратите внимание, что separatorInset сохраняется в повторно используемых ячейках, поэтому, поскольку вы не можете «скрыть», вам нужно держать эти ячейки скрытого разделителя изолированными в их собственном reuseIdentifier.