【问题标题】:UITableView setEditing doesn't animate label constraint changeUITableView setEditing 不会为标签约束更改设置动画
【发布时间】: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 ?

标签: ios cocoa-touch uitableview nslayoutconstraint


【解决方案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 内的布局动画会立即发生:/
猜你喜欢
  • 2016-10-20
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
相关资源
最近更新 更多