Как отметили (многие) другие, вы можете легко скрыть все разделители UITableViewCell, просто отключив их для всего самого UITableView; например, в вашем UITableViewController
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
К сожалению, это настоящая PITA для на соту , что вы и просите.
Лично я пробовал многочисленные варианты изменения cell.separatorInset.left
, опять же, как (многие) другие предложили, но проблема в том, чтобы процитировать Apple (выделение добавлено):
" ... Это свойство можно использовать для добавления пробела между содержимым текущей ячейки и левым и правым краями таблицы. Положительные значения вставки перемещают содержимое ячейки и разделитель ячеек внутрь и в сторону от краев стола ..."
Таким образом, если вы попытаетесь «спрятать» разделитель, переместив его за экран вправо, в конечном итоге вы также можете сделать отступ в свой вид контента тоже. По предложению 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
(против разоблачение separatorIsHidden). Обратите внимание, что separatorInset сохраняется в повторно используемых ячейках, поэтому, поскольку вы не можете «скрыть», вам нужно держать эти ячейки скрытого разделителя изолированными в их собственном reuseIdentifier.