gpt4 book ai didi

ios - 改变 UITableViewCell 高度的自定义动画

转载 作者:可可西里 更新时间:2023-11-01 05:35:34 37 4
gpt4 key购买 nike

我想用 UIView 动画制作改变 UITableViewCell 高度的动画(将来用 spring 动画)。

所以我有:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.backgroundColor = [UIColor greenColor];
}
UILabel *viewLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10.0f, [[UIScreen mainScreen] bounds].size.width, 40.0f)];
viewLabel.text = @"Test";
viewLabel.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:viewLabel];

return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView beginUpdates];
[self animateCell:indexPath andTableView:tableView];
[tableView endUpdates];
}


- (void)animateCell:(NSIndexPath*)indexPath andTableView:(UITableView*)tableView
{
[UIView animateWithDuration:1.0f animations: ^
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
CGRect rect = cell.frame;
rect.size.height = 90.0f;
cell.frame = rect;
NSLog(@"%f", cell.frame.size.height);
}];
}

但它不起作用。但如果我添加:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([indexPath isEqual:[tableView indexPathForSelectedRow]])
{
return 90.0f;
}
return 40.0f;
}

我看到单元格正在改变它的高度并且动画被应用到在 animateCell 方法中创建的自定义单元格

最佳答案

我认为您不应该在调用 reloadData 之前使用 beginUpdate/endUpdates 方法并手动执行动画。单元格的最终状态(动画后)由数据源定义。下面是 tableView:didSelectRowAtIndexPath:

中的动画示例
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
_selectedIndexPath = indexPath;

[UIView animateWithDuration:1 animations:^{
// move down cells which are below selected one
for (UITableViewCell *cell in tableView.visibleCells) {
NSIndexPath *cellIndexPath = [tableView indexPathForCell:cell];

if (cellIndexPath.row > indexPath.row) {
CGRect frame = cell.frame;
frame.origin.y += kTargetHeight - tableView.rowHeight;
cell.frame = frame;
}
}
// expand selected cell
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

CGRect frame = cell.frame;
frame.size.height = kTargetHeight;
cell.frame = frame;
} completion:^(BOOL finished) {
[tableView reloadData]; // commit final state
}];
}

选中单元格的最终状态:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([indexPath isEqual:_selectedIndexPath]) {
return kTargetHeight;
}

return tableView.rowHeight;
}

关于ios - 改变 UITableViewCell 高度的自定义动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21657668/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com