Вы должны переопределить layoutSubviews
и сделать что-то вроде следующего.И не забывайте устанавливать уровень отступа больше 0 :) Для пользовательских ячеек уровень отступа не применяется по умолчанию.
Чтобы избежать отступа для одного движения пальца для удаления жеста, вам придется проделать еще большую работу.Существует состояние, которое отражает состояние редактирования ячейки. Оно не является общедоступным, но к нему можно получить доступ с помощью - (void)willTransitionToState:(UITableViewCellStateMask)aState
, поэтому сохранение его в свойстве делает работу для layoutViews.
Документация Apple для willTransitionToState:
Обратите внимание, что когда пользователь проводит пальцем по ячейке, чтобы удалить ее, ячейка переходит в состояние, определенное постоянной UITableViewCellStateShowingDeleteConfirmationMask, ноUITableViewCellStateShowingEditControlMask не установлен.
заголовочный файл
int state;
...
@property (nonatomic) int state;
...
реализация ячейки
@synthesize state;
...
- (void)layoutSubviews
{
[super layoutSubviews];
self.contentView.frame = CGRectMake(0,
self.contentView.frame.origin.y,
self.contentView.frame.size.width,
self.contentView.frame.size.height);
if (self.editing
&& ((state & UITableViewCellStateShowingEditControlMask)
&& !(state & UITableViewCellStateShowingDeleteConfirmationMask)) ||
((state & UITableViewCellStateShowingEditControlMask)
&& (state & UITableViewCellStateShowingDeleteConfirmationMask)))
{
float indentPoints = self.indentationLevel * self.indentationWidth;
self.contentView.frame = CGRectMake(indentPoints,
self.contentView.frame.origin.y,
self.contentView.frame.size.width - indentPoints,
self.contentView.frame.size.height);
}
}
- (void)willTransitionToState:(UITableViewCellStateMask)aState
{
[super willTransitionToState:aState];
self.state = aState;
}