Uitableview “删除”按钮出现时,自定义表格视图单元格中缺少UISlider width的动画

Uitableview “删除”按钮出现时,自定义表格视图单元格中缺少UISlider width的动画,uitableview,animation,edit,uislider,Uitableview,Animation,Edit,Uislider,这是一个微妙的问题:我有一个带有滑块和分段控件的自定义tableview单元格。当表格进入编辑模式时,一切看起来都很好,当红色的“删除”按钮出现时,滑块和分段控件的宽度都会缩小,以便在右侧为“删除”按钮留出空间,并且该缩小会正确设置动画。所以一切都很好 但是,当用户不执行删除操作,而是点击超出边界时,滑块会立即弹回到其全宽,直到删除按钮动画滑动完成。但是,分段控件已正确设置回其全宽的动画。我自己不会处理任何动画。为什么滑块没有设置动画?我的设置代码如下。有什么想法吗 请注意,当左侧圆形红色选择按

这是一个微妙的问题:我有一个带有滑块和分段控件的自定义tableview单元格。当表格进入编辑模式时,一切看起来都很好,当红色的“删除”按钮出现时,滑块和分段控件的宽度都会缩小,以便在右侧为“删除”按钮留出空间,并且该缩小会正确设置动画。所以一切都很好

但是,当用户不执行删除操作,而是点击超出边界时,滑块会立即弹回到其全宽,直到删除按钮动画滑动完成。但是,分段控件已正确设置回其全宽的动画。我自己不会处理任何动画。为什么滑块没有设置动画?我的设置代码如下。有什么想法吗

请注意,当左侧圆形红色选择按钮出现或消失时,所有元素的动画都很好

如果我不能解决这个问题,我想知道如何阻止删除按钮在内容出现时向左推内容,但保留选择按钮的缩进动画

NSArray *itemArray = @[@"1", @"2", @"3", @"4"];
self.source = [[[UISegmentedControl alloc] initWithItems:itemArray] autorelease];
self.source.frame = CGRectMake(80, 10, cb.size.width - 92, 36);
self.source.segmentedControlStyle = UISegmentedControlStylePlain;
self.source.selectedSegmentIndex = 0;
self.source.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.contentView addSubview:self.source];

self.phaseSlider = [[[UISlider alloc] initWithFrame:CGRectMake(80, 50, cb.size.width - 92, 36)] autorelease];
self.phaseSlider.continuous = TRUE;
self.phaseSlider.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.contentView addSubview:self.phaseSlider];

我找到了解决这个问题的办法。显然,当“删除”按钮出现时,使用调整大小掩码允许滑块调整大小存在一些问题。相反,我删除了灵活的宽度调整遮罩。我在
initWithStyle
中初始化控件,但仅在
layoutSubViews
中设置框架。不管怎样,这实际上是设置控制框的更好方法,因为在initWithStyle中,单元格的宽度和高度实际上是未知的。在
layoutSubViews
中设置帧时,将在“删除”按钮出现和消失动画期间调用该帧,并正确设置位置和大小的动画

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
    {
        // Initialization code
        NSArray *itemArray = @[@"1", @"2", @"3", @"4"];
        self.source = [[[UISegmentedControl alloc] initWithItems:itemArray] autorelease];
        self.source.segmentedControlStyle = UISegmentedControlStylePlain;
        self.source.selectedSegmentIndex = 0;
        [self.contentView addSubview:self.source];

        self.phaseSlider = [[[UISlider alloc] initWithFrame:CGRectZero] autorelease];
        self.phaseSlider.continuous = TRUE;
        [self.contentView addSubview:self.phaseSlider];

        self.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    return self;
}

- (void)layoutSubviews
{    
    [super layoutSubviews];

    float w = self.contentView.bounds.size.width;

    self.source.frame = CGRectMake(78, 10, w - 92, 36);
    self.phaseSlider.frame = CGRectMake(78, 50, w - 92, 36);
}