【问题标题】:UITableView - BeginUpdates/EndUpdates Animation SettingsUITableView - BeginUpdates/EndUpdates 动画设置
【发布时间】:2026-02-17 17:45:02
【问题描述】:

我正在构建一个UITableView,其中的单元格在选中时会在下方“滑出”一个附加视图。为此,我使用[tableview beginUpdates][tableView endUpdates] 对表格视图中的行高进行了动画处理,然后我对滑动视图进行了动画处理,以使其与该动画一起平移,使其看起来像是未被发现。我使用的动画效果很好,但与行高的移动方式略有不同。

例如,这是我的牢房。通常,只显示白色部分(由于突出显示为蓝色),但如果您选择一行,灰色视图会从底部滑出,就像该行带有几个按钮的操作菜单:

我想知道的是:表格视图的BeginUpdates/EndUpdates 方法默认使用的动画设置是什么,或者如果不知道,是否可以自定义设置,以便我的行高和滑动视图的动画效果完全一样吗?

tableView 方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    if ([[tableView indexPathForSelectedRow] isEqual:indexPath])
        return CellHeightAlternate;
    return CellHeightNormal;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    SlideOutViewTableViewCell *newCell  = (SlideOutViewTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];

    [tableView beginUpdates];
    [tableView endUpdates];

    [newCell showView];
}

SlideOutTableViewCellshowView 方法:

- (void)showView{
    [self.slideoutView setFrame:CGRectMake(self.slideoutView.frame.origin.x, 40, self.slideoutView.frame.size.width, self.slideoutView.frame.size.height)];
    [UIView animateWithDuration:.25 animations:^{
        [self.slideoutView setFrame:CGRectMake(self.slideoutView.frame.origin.x, 70, self.slideoutView.frame.size.width, self.slideoutView.frame.size.height)];

    }];
}

【问题讨论】:

  • 对不起..我什么都不懂。附言为什么你使用[tableView beginUpdates][tableView endUpdates] 没有任何内容?
  • @MatteoGobbi 我从这个问题中得到了代码:*.com/questions/460014/…。如果它们之间没有任何内容,它仍然会在单元格上调用重绘,并在选择不同的单元格时为 - tableView: heightForRowAtIndexPath: 中发生的更改设置动画

标签: ios objective-c uitableview uiview uianimation


【解决方案1】:

所以我通过反复试验找到了答案:

表格视图更改行高的动画(来自[tableview beginUpdates][tableView endUpdates] 方法)是持续时间为0.3 秒的线性动画(无动画效果)。

【讨论】: