UITableView setEditing 不会为标签约束更改设置动画

Posted

技术标签:

【中文标题】UITableView setEditing 不会为标签约束更改设置动画【英文标题】:UITableView setEditing doesn't animate label constraint change 【发布时间】:2014-01-11 00:09:50 【问题描述】:

所以,我在 tableview 中有一个自定义的 tableview 单元格,当我使用 [self.tableView setEditing:YES animated:YES]; 代码设置编辑模式时。

它设置了编辑模式,但问题是我在单元格上的标签只是传送到它的新位置,因为当重新排序控件显示自身时它被向左推。如何在编辑发生时为约束更改设置动画?

我的表格视图单元格的图片:(当编辑继续时,右约束明显增加,但它不是动画,我希望它是)

编辑:这是我的单元格的 setEditing。 我尝试了很多方法,但动画由于某种原因无法正常工作,更改会立即发生。

-(void)setEditing:(BOOL)editing animated:(BOOL)animated

    [super setEditing:editing animated:animated];

    if (editing) 
        [UIView animateWithDuration:0.25f
                              delay:0.0f
                            options:UIViewAnimationOptionCurveEaseIn
                         animations:^
                             self.labelConstraint.constant = 100;
                             [self layoutIfNeeded];

                         
                         completion:^(BOOL finished)
         


         ];
    

【问题讨论】:

你能展示你的单元格对setEditing:animated:的实现吗? 尝试在[self layoutIfNeeded];之前添加[self setNeedsLayout]; 您找到解决方案了吗?我也遇到了同样的问题。 5 年后我遇到了同样的问题。说真的,这还没解决??我刚刚申请了代码级支持,所以我们将看看 Apple 对此有何评论。 6 年后我仍然坚持这一点......有人弄清楚了吗? @Trev14 ? 【参考方案1】:

如果我在动画块之前更改约束,对我有用

- (void) setEditing:(BOOL)editing animated:(BOOL)animated

    [self layoutIfNeeded];
    self.containerLeftConstraint.constant = editing ? EditingIndent : 0.0f;

    [UIView animateWithDuration:0.3
                     animations:^

                         [self layoutIfNeeded];
                     ];


【讨论】:

这对我不起作用。在我的情况下,我在单元格中有一个右对齐的标签,即使在setEditing(:animated:) 的每个可以想象的点上都有过多的layoutIfNeeded() 调用,动画的缺乏也很明显。如果标签左对齐并且仅限制在单元格 contentView 的左边缘,那么一切看起来都很好,就像 contentView 平滑地动画到右侧一样,所以删除按钮可以显示在左侧。 contentView 内的布局动画会立即发生:/

以上是关于UITableView setEditing 不会为标签约束更改设置动画的主要内容,如果未能解决你的问题,请参考以下文章

UITableView编辑模式

UITableView reloadData 在编辑和保留动画时

self.editing 与 self.tableView.editing 和 setEditing 的混淆

如果单元格是第一响应者并且不在屏幕上,则 UITableViewCell setEditing:animated 不会被调用

如何避免在 UITableViewCell 上滑动删除调用 setEditing

如何在 UITableView 中成为FirstResponder UITextField