我可以制作改变行高的动画,但是 UITableViewRowAnimationFade 不好,因为它在动画时会闪烁
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Main VC";
selectedIndexes = [NSMutableDictionary new];
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self.tableView reloadData];
}
- (BOOL)cellIsSelected:(NSIndexPath *)indexPath
{
NSNumber *selectedIndex = [selectedIndexes objectForKey:indexPath];
return selectedIndex == nil ? NO : [selectedIndex boolValue];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
static BOOL noFirst;
if (!indexPath.row && !noFirst) {
[selectedIndexes setObject:@(YES) forKey:indexPath];
noFirst = YES;
}
if ([self cellIsSelected:indexPath]) {
UIImage *cellImage = HelperDf.dataArray[indexPath.row][@"image"];
CGFloat aspectRatioIndex = cellImage.size.height / cellImage.size.width;
return [Utils screenWidth:self.interfaceOrientation] * aspectRatioIndex;
} else {
return heightCell;
}
}
我的 didSelectRowAtIndexPath
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableSet *insideSet = [NSMutableSet new];
[insideSet addObject:indexPath];
BOOL isSelected = ![self cellIsSelected:indexPath];
for (NSIndexPath *keyIndexPath in selectedIndexes) {
[insideSet addObject:keyIndexPath];
}
[selectedIndexes removeAllObjects];
[selectedIndexes setObject:@(isSelected) forKey:indexPath];
[tableView reloadRowsAtIndexPaths:insideSet.allObjects withRowAnimation:UITableViewRowAnimationNone];
}
因此,如果我使用 [tableView beginUpdates] [tableView endUpdates
它,我的标签和numberOfLinew
. 如何更改我更改的标签和其他参数的框架cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MainCell";
MainCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSDictionary *dataDictionary = HelperDf.dataArray[indexPath.row];
cell.titleLabel.text = dataDictionary[@"title"];
cell.descriptionLabel.width = [Utils screenWidth:self.interfaceOrientation] - 40;
cell.descriptionLabel.text = dataDictionary[@"fullText"];
if ([self cellIsSelected:indexPath]) {
cell.sequeBtn.hidden = NO;
cell.pictureView.contentMode = UIViewContentModeScaleToFill;
cell.descriptionLabel.numberOfLines = 7;
} else {
cell.sequeBtn.hidden = YES;
cell.pictureView.contentMode = UIViewContentModeScaleAspectFill;
cell.descriptionLabel.numberOfLines = 2;
}
[cell.descriptionLabel sizeToFit];
cell.pictureView.image = dataDictionary[@"image"];
return cell;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
MainCell *mainCell = (MainCell *)cell;
mainCell.descriptionLabel.originY = mainCell.sequeBtn.hidden ? heightCell - mainCell.descriptionLabel.height - 5 : mainCell.height - mainCell.sequeBtn.height - mainCell.descriptionLabel.height - 12;
}