Search code examples
iphoneobjective-cuitableviewcustom-cell

How to stop cells from indenting - shouldIndentWhileEditingRowAtIndexPath has no effect


I have a plain (not grouped) tableView with custom cells, and when I hit the Edit button, the cells indent. I don't want that, I want the deletion sign to lay right on top of my cell.

I tried shouldIndentWhileEditingRowAtIndexPath and also cell.shouldIndentWhileEditin = NO; as well as cell.indentionLevel = -3, but both won't have any effect. Any idea why?

Could this be due to my setup? I followed this tutorial, and I also tried a setup like Davyd suggested here, but the last did not only still indent my cells, it made it even worse, as the cells were indented, when I press Done.. and I can't get the background image to cover the whole cell...

So, anyone knows how to stop custom cells in a plain tableview from intending, while still showing the delete and move sign?

//EDIT: btw, I build the custom cell in IB. I can take away the checkmark saying "Indent while Editing", it doesn't care. I can change the values for indention level and width, no effect. If i change the editing accessory, it happily displays it. Hope that helps..

Thanks!


Solution

  • After a lot of research and trying pixel by pixel, it turned out, I needed to use -(void)layoutSubviews to "transit" from the original state to the original size.. If someone else ever needs to do that, here's my code, placed in my CustomCell.m:

    - (void)willTransitionToState:(UITableViewCellStateMask)aState
    {
    [super willTransitionToState:aState];
    self.state = aState;
    }
    
    
    - (void)layoutSubviews
    {
    [super layoutSubviews];
    // no indent in edit mode
    self.contentView.frame = CGRectMake(0,                                          
                                        self.contentView.frame.origin.y,
                                        self.contentView.frame.size.width, 
                                        self.contentView.frame.size.height);
    
    if (self.editing )        
    {
        NSLog(@"subview");
        float indentPoints = self.indentationLevel * self.indentationWidth;
    
        switch (state) {
            case 3:
                self.contentView.frame = CGRectMake(indentPoints,
                                                    self.contentView.frame.origin.y,
                                                    self.contentView.frame.size.width +124,// - indentPoints, 
                                                    self.contentView.frame.size.height);   
    
                break;
            case 2:
                // swipe action
                self.contentView.frame = CGRectMake(indentPoints,
                                                    self.contentView.frame.origin.y,
                                                    self.contentView.frame.size.width +75,// - indentPoints, 
                                                    self.contentView.frame.size.height);   
    
                break;
            default:
                // state == 1, hit edit button
                self.contentView.frame = CGRectMake(indentPoints,
                                                    self.contentView.frame.origin.y,
                                                    self.contentView.frame.size.width +80,// - indentPoints, 
                                                    self.contentView.frame.size.height);  
                break;
            }
        }
    }
    

    Hope that helps :)