UITableViewCell 折叠时展开和折叠动画不起作用
Posted
技术标签:
【中文标题】UITableViewCell 折叠时展开和折叠动画不起作用【英文标题】:UITableViewCell expand and collapse animation not working when collapsing 【发布时间】:2013-07-28 15:57:59 【问题描述】:我很难弄清楚为什么我的 UITableViewCell 在未选中时不会为 contentView 设置动画。
我编写了一些代码来展开和折叠单元格,但不知何故,当折叠单元格时,它会为高度设置动画,而不是 contentView。其实好像 contentView 被移除了。
作为记录,我在 contentView 中添加了一个 UILabel。展开时,UILabel 的框架会相应地调整大小,但在折叠时,UILabel 只是被解除或隐藏而没有动画。
有什么建议吗?
这里是一些示例代码:
/* Expanding and collapsing code */
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if ([self cellIsSelected:indexPath])
//Item is clicked, unclick it
[self.selectedIndexes removeObject:indexPath];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
else
//Item is not clicked. Deselect others and select this
[self.selectedIndexes removeAllObjects];
[self.selectedIndexes addObject:indexPath];
[tableView beginUpdates];
[tableView endUpdates];
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
if ([self cellIsSelected:indexPath])
return 150;
return [tableView rowHeight];
【问题讨论】:
【参考方案1】:试试这个,希望对你有帮助
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if(add == NO)// i took bool to compare change it for your need
[self.aTableVIew deselectRowAtIndexPath:indexPath animated:YES];
//you need do deletions witin this commit and begin
[self.aTableVIew beginUpdates];
//animations are within beginUpdates and endUpdates otherwise no animations
[array removeObjectAtIndex:indexPath.row];
[self.aTableVIew deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.aTableVIew endUpdates];
add = YES;
else
//else in your case add objects to array and reload the table
[array removeAllObjects];
[self.aTableVIew reloadData];
[self.aTableVIew beginUpdates];
//compute where to insert
[array addObject:[NSString stringWithFormat:@"%d",indexPath.row]];
[self.aTableVIew insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationFade];
[self.aTableVIew endUpdates];
add = NO;
【讨论】:
酷我回家看看【参考方案2】:看看我制作的演示。 它只是通过单击部分标题上的操作来折叠和展开示例项目。
Collapse And Expand
希望这会对你有所帮助。
【讨论】:
以上是关于UITableViewCell 折叠时展开和折叠动画不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UItableViewCell 展开/折叠动画(展开时有效,但不折叠)
可折叠部分和每个部分的多个自定义 UITableViewCell