IOS 6.1 acts differently with willTransitionToState

I will subclass my UITableCell to move the Minus image and Delete the image in EditMode in the opposite direction. It has worked fine so far, but in iOS 6, when I use reloadData on my table, the image of the negative image goes to the left side of the cell, and does not stay on the right. I do not know what has changed in iOS 6 to cause this behavior.

I don’t know if this caused a problem, but I registered all the origin in iOS 5 and iOS 6, and the only difference is:

iOS 5.0: Magazine 5 - State 1 And 3: 560.000000 , 0.000000, 41.000000, 40.000000

iOS 6.1: Log 5 - State 1 & 3: 808.000000 , 0.000000, 41.000000, 40.000000

Here is the code:

.h:

 #import <UIKit/UIKit.h> #define UITableViewCellEditControlOffset 280 #define UITableViewCellDeleteConfirmationControlOffset 250 #define UITableViewCellAnimationOffset 20 #define UITableViewCellAnimationDuration 0.0 #define BigCellHeight 40 #define SmallCellHeight 40 typedef enum{ Name = -1, Additions = -2, Price = -3, BackgroundImage = -4, Line = -5, Edit = -6, Plate = -7, Sign = -8 }CellData; @interface RTLUITableViewCelliPhone : UITableViewCell { UITableViewCellStateMask state; BOOL editHiddenEarlier, priceHiddenEarlier; } @property (nonatomic, assign) BOOL inEditingMode; @property (nonatomic, assign) BOOL editable, removable; 

.m:

 #import "RTLUITableViewCelliPhone.h" @implementation RTLUITableViewCelliPhone @synthesize editable, removable, inEditingMode; - (void)layoutSubviews{ [super layoutSubviews]; self.contentView.frame = CGRectMake(0, 0, 320, BigCellHeight); } - (void)willTransitionToState:(UITableViewCellStateMask)aState{ [super willTransitionToState:aState]; state = aState; if (state==0) { for (UIView *subview in self.subviews){ if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]){ UIView *noEntranceView = [subview.subviews objectAtIndex:0]; noEntranceView.alpha = 0; } if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]){ UIView *deleteView = [subview.subviews objectAtIndex:0]; deleteView.alpha = 0; } } } if (state==1 || state==3){ for (UIView *subview in self.subviews){ if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]){ UIView *noEntranceView = [subview.subviews objectAtIndex:0]; noEntranceView.alpha = 0; subview.frame = CGRectMake(subview.frame.origin.x+UITableViewCellEditControlOffset, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); NSLog(@"Log 1 - State 1 And 3: %f , %f , %f , %f ",subview.frame.origin.x+UITableViewCellEditControlOffset, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); } if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]){ UIView *deleteView = [subview.subviews objectAtIndex:0]; deleteView.alpha = 0; subview.frame = CGRectMake(subview.frame.origin.x-UITableViewCellDeleteConfirmationControlOffset, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); NSLog(@"Log 2 - State 1 And 3: %f , %f , %f , %f ",subview.frame.origin.x-UITableViewCellDeleteConfirmationControlOffset, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); } } } if ([self inEditingMode]) { if (state==3) { editHiddenEarlier = [self.contentView viewWithTag:Edit].hidden; priceHiddenEarlier = [self.contentView viewWithTag:Price].hidden; [self.contentView viewWithTag:Sign].hidden = [self.contentView viewWithTag:Edit].hidden = [self.contentView viewWithTag:Price].hidden = YES; } if (state==1) { [self.contentView viewWithTag:Edit].hidden = !self.editable || editHiddenEarlier; [self.contentView viewWithTag:Sign].hidden = [self.contentView viewWithTag:Price].hidden = ![self.contentView viewWithTag:Edit].hidden; } } } - (void)didTransitionToState:(UITableViewCellStateMask)aState{ [super didTransitionToState:aState]; state = aState; if (state==0) { // End editing for (UIView *subview in self.subviews){ if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]){ [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:UITableViewCellAnimationDuration]; UIView *noEntranceView = [subview.subviews objectAtIndex:0]; noEntranceView.alpha = 1; noEntranceView.frame = CGRectMake(noEntranceView.frame.origin.x+UITableViewCellAnimationOffset, noEntranceView.frame.origin.y, noEntranceView.frame.size.width, noEntranceView.frame.size.height); [UIView commitAnimations]; NSLog(@"Log 3 - State 0: %f , %f , %f , %f ",noEntranceView.frame.origin.x+UITableViewCellAnimationOffset, noEntranceView.frame.origin.y, noEntranceView.frame.size.width, noEntranceView.frame.size.height); } if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]){ UIView *deleteView = [subview.subviews objectAtIndex:0]; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:UITableViewCellAnimationDuration]; deleteView.alpha = 1; deleteView.frame = CGRectMake(deleteView.frame.origin.x-UITableViewCellAnimationOffset, deleteView.frame.origin.y, deleteView.frame.size.width, deleteView.frame.size.height); [UIView commitAnimations]; NSLog(@"Log 4 - State 0: %f , %f , %f , %f ",deleteView.frame.origin.x-UITableViewCellAnimationOffset, deleteView.frame.origin.y, deleteView.frame.size.width, deleteView.frame.size.height); } } } if (state==1 || state==3){ for (UIView *subview in self.subviews){ if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]){ subview.frame = CGRectMake(560, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); NSLog(@"Log 5 - State 1 And 3: %f , %f , %f , %f ",subview.frame.origin.x+UITableViewCellEditControlOffset, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); UIView *noEntranceView = [subview.subviews objectAtIndex:0]; noEntranceView.frame = CGRectMake(noEntranceView.frame.origin.x+UITableViewCellAnimationOffset, noEntranceView.frame.origin.y, noEntranceView.frame.size.width, noEntranceView.frame.size.height); NSLog(@"Log 6 - State 1 And 3: %f , %f , %f , %f ",noEntranceView.frame.origin.x+UITableViewCellAnimationOffset, noEntranceView.frame.origin.y, noEntranceView.frame.size.width, noEntranceView.frame.size.height); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:UITableViewCellAnimationDuration]; noEntranceView.alpha = 1; noEntranceView.frame = CGRectMake(noEntranceView.frame.origin.x-UITableViewCellAnimationOffset, noEntranceView.frame.origin.y, noEntranceView.frame.size.width, noEntranceView.frame.size.height); [UIView commitAnimations]; NSLog(@"Log 7 - State 1 And 3: %f , %f , %f , %f ",noEntranceView.frame.origin.x-UITableViewCellAnimationOffset, noEntranceView.frame.origin.y, noEntranceView.frame.size.width, noEntranceView.frame.size.height); } if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]){ subview.frame = CGRectMake(subview.frame.origin.x-UITableViewCellDeleteConfirmationControlOffset, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); NSLog(@"Log 8 - State 1 And 3: %f , %f , %f , %f ",subview.frame.origin.x-UITableViewCellDeleteConfirmationControlOffset, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height); UIView *deleteView = [subview.subviews objectAtIndex:0]; deleteView.frame = CGRectMake(deleteView.frame.origin.x-UITableViewCellAnimationOffset, deleteView.frame.origin.y, deleteView.frame.size.width, deleteView.frame.size.height); NSLog(@"Log 9 - State 1 And 3: %f , %f , %f , %f ",deleteView.frame.origin.x-UITableViewCellAnimationOffset, deleteView.frame.origin.y, deleteView.frame.size.width, deleteView.frame.size.height); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:UITableViewCellAnimationDuration]; deleteView.alpha = 1; deleteView.frame = CGRectMake(deleteView.frame.origin.x+UITableViewCellAnimationOffset, deleteView.frame.origin.y, deleteView.frame.size.width, deleteView.frame.size.height); [UIView commitAnimations]; NSLog(@"Log 10 - State 1 And 3: %f , %f , %f , %f ",deleteView.frame.origin.x+UITableViewCellAnimationOffset, deleteView.frame.origin.y, deleteView.frame.size.width, deleteView.frame.size.height); } } } } @end 
+4
source share
1 answer

If auto-linking is enabled in xib, this can cause a problem. This answer may provide some insight into the contentView not backing down in the iOS 6 prototype cell UITableViewCell

0
source

All Articles