Weird animations when editing custom cell?

2019-08-17 07:03发布

I created a UITableViewCell in Xcode 4 using IB. But for some weird reason when I trigger my edit button, the cell acts really weird and doesn't have the same animations as a normal table view cell. I don't know what is happening, I tried implementing -(void)setEditing:(BOOL)editing animated:(BOOL)animated in my custom cell class but still nothing works.

UPDATE: My ViewController that I am using the cell in, has this code under cellForAtIndex to display the cell.

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];
    for (id currentObject in topLevelObjects) 
    {
        if ([currentObject isKindOfClass:[UITableViewCell class]]) 
        {
            cell = (CustomCell *) currentObject;
            break;
        }
        return cell;
    }
}

Normal view:

The normal view

When tapping edit button:

enter image description here

edit

And even when swiping it covers the text when it's supposed to move it aside:

enter image description here

1条回答
对你真心纯属浪费
2楼-- · 2019-08-17 07:34

First suggestion; don't use IB for custom UITableViewCells.

Next; make sure you're adding any custom views to the UITableViewCell's contentView... not just the cell itself. When the editing portions are shown (like the delete button) the UITableViewCell's contentView will shrink automatically. If you have the correct UIViewAutoresizing mask on the UILabel / whatever you've added to the contentView, it will get resized / moved correctly.

Edit, to answer your question in comments:

The same way you would any custom view. You could make it a class on it's own, or, depending on your needs, construct it ad-hoc. A class is usually best so you can reference any of your custom things you've added to the cell and reuse cells / etc.

But, here's is an example of constructing one ad-hoc.

UIImageView * myCheckBox = ...
UILabel * myLabel = ...
UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
[cell.contentView addSubview:myCheckBox];
[cell.contentView addSubview:myLabel];
self.customCell = cell;

Edit #2

- (void)layoutSubviews
{
    [super layoutSubviews];
    self.textLabel.frame = CGRectMake(50, self.textLabel.frame.origin.y, self.contentView.frame.size.width - 50, self.textLabel.frame.size.height);
}
查看更多
登录 后发表回答