I am using a custom UITableViewCell in my app, and I am trying to adjust the frame of the “swipe to delete” button.
This is what I’m doing:
- (void)layoutSubviews {
[super layoutSubviews];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) return;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.0f];
for (UIView *subview in self.subviews) {
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {
CGRect newFrame = subview.frame;
newFrame.origin.x = newFrame.origin.x - 25;
subview.frame = newFrame;
} else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) {
CGRect newFrame = subview.frame;
newFrame.origin.x = newFrame.origin.x - 25;
subview.frame = newFrame;
}
}
}
It shows up in the new position, which is great. However, when I click away from the button so that it disappears, the button seems to suddenly move about 10 points to the left, and then gets removed.
Why is this happening, and how can I fix it?
I’m not familiar with the animation code you’re using, but I would try using
willTransitionToState(and, if needed,didTransitionToState) instead oflayoutSubviewsto handle animation during editing tableViewCells.Both have been available since iOS 3.0.
Place this code in your subclass of
UITableViewCell. It will handle all of the transitions from oneUITableViewCellStateMaskto another, and you can implement the animation you need for the transition to each state. Just implement the animations you require in the proper place according to the NSLogs I added. (again, not familiar with your animation code, but I did test it and saw results using this code)And if you need something to happen after one of these events, just implement the same code, but in
didTransitionToState. The sameUITableViewCellStateMasks apply.