What is happening is that when UITableViewCell shows the reorder control it also adds an empty, 1 pixel wide, white UIView to its array of subviews.
Bluntly: this is a bug that Apple should fix.
However, you can get around it by finding that annoying view every time it appears and setting its background color to transparent. Quick tip: the annoying white view is always the last in the UITableViewCell's subviews array and is always 1 pixel wide. We will use this to find it.
When you turn editing on for the table, make all of the visible annoying 1 pixel views transparent. So the action method which toggles "edit" mode on the table might look like this:
- (IBAction)edit:(id)sender
{
[tableView setEditing:!tableView.editing animated:YES];
for (UITableViewCell *cell in [tableView visibleCells])
{
if (((UIView *)[cell.subviews lastObject]).frame.size.width == 1.0)
{
((UIView *)[cell.subviews lastObject]).backgroundColor =
[UIColor clearColor];
}
}
}
and keep doing so for all new views as they become visible by implementing this in your UITableViewDelegate:
- (void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell]
forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (((UIView *)[cell.subviews lastObject]).frame.size.width == 1.0)
{
((UIView *)[cell.subviews lastObject]).backgroundColor =
[UIColor clearColor];
}
}
This hack to fix the problem is fairly innocuous and if Apple fix the bug in future (stop adding the annoying 1 pixel view), this code should quietly stop doing anything.