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 reloadData 在编辑和保留动画时
self.editing 与 self.tableView.editing 和 setEditing 的混淆
如果单元格是第一响应者并且不在屏幕上,则 UITableViewCell setEditing:animated 不会被调用