Создайте подкласс UITableViewCell и сдвиньте не редактируемую строку самостоятельно.
@interface MyHistoryTableViewCell : UITableViewCell
@end
@implementation MyHistoryTableViewCell : UITableViewCell
#define CELL_SLIDE_WIDTH 32 // found empirically
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
if ( self.editingStyle == UITableViewCellEditingStyleNone ) { // not editable
CGRect frame = self.frame;
UITableView *tableView = ((UITableView *)(self.superview));
if ( tableView.editing ) { // going to editing mode
frame.origin.x = CELL_SLIDE_WIDTH;
frame.size.width = tableView.frame.size.width - CELL_SLIDE_WIDTH;
} else { // ending editing
frame.origin.x = 0;
frame.size.width = tableView.frame.size.width;
}
[UIView animateWithDuration:0.3 animations:^{ // match the tableView slide duration
self.frame = frame;
}];
}
}
@end
Если у вас есть подпредставления, которые необходимо закрепить справа от ячейки (например, кнопка, которая не должна скользить), тогда выполните
mySubview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; // anchors to the right margin
Кроме того, вы должны проявлять творческий подход при настройке frameview.origin.x подпредставления. Я экспериментировал со многими значениями, пока не нашел что-то работающее (значение не имело для меня смысла).