我正在使用自定义 UITableViewCells 编写自定义 UITableView。正如许多开发人员发现的那样,这样做的一个不幸的副作用是,当表格开始编辑时,内容(在我的例子中为 UILabel)不会自动移动。因此,这是我为处理它而编写的位于 UITableViewCell 自定义子类中的代码:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated];
if (animated) {
[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
CGRect titleFrame = self.titleLabel.frame;
if (editing) {
[self.titleLabel setFrame:CGRectMake(15, titleFrame.origin.y, titleFrame.size.width, titleFrame.size.height)];
} else {
[self.titleLabel setFrame:CGRectMake(25, titleFrame.origin.y, titleFrame.size.width, titleFrame.size.height)];
}
}completion:nil];
}
不幸的是,我似乎无法弄清楚要使用的正确选项,因为我尝试过的任何组合都没有奏效。如果没有UIViewAnimationOptionBeginFromCurrentState
UILabel 在开始动画之前移动到最左边,这是不可取的。并且没有UIViewAnimationOptionBeginFromCurrentState
UILabel 可以很好地执行动画,但最后会有一个小的橡皮筋效果。
关于发生了什么的任何想法?谢谢。
编辑:我已经弄清楚发生了什么!不知道如何解决它,但现在我现在正是问题所在!
首先,我必须取消选中“使用自动布局”才能让单元格自动移动。
未编辑时,标签的初始 x 值为 25。编辑的时候,如果自己不移动label,动画就生效了,会移动到左边饰品右边25个点。第一行显示 15 的原因:
if (editing) {
[self.titleLabel setFrame:CGRectMake(15 ...
是因为 25 分的差距相当大,而且看起来不太对劲。因此,在代码到位的动画中,将标签移动到 25 标记处,然后返回到 15 标记处,从而创建了橡皮筋效果。
为了解决这个问题,我尝试了各种各样的方法,比如将[super setEditing:...]
调用移到代码下方,总是将该调用的动画参数设置为 NO... on and on,没有运气。解决方案是以某种方式使标签在比 x 值更短的距离上进行动画处理,或者(正如我最初尝试做的那样)在本地创建动画以将其发送到特定的 x 值并让它保持在那里。
[setEditing ]
我的直觉告诉我,在我的代码块之前 contentView 的动画(可能)发生的位置发生调用的连锁反应是一个问题UITableView
,因此将标签移过来,然后我的代码执行,将其移回。
注意:无论标签是否是 contentView 的子视图,都会发生该行为。