删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画

Posted

技术标签:

【中文标题】删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画【英文标题】:Missing animation of UISlider width in custom table view cell when delete button appears 【发布时间】:2013-03-12 10:29:44 【问题描述】:

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

但是,当用户没有执行删除操作而是轻触越界时,滑块会在删除按钮动画滑动完成之前立即弹回其全宽。然而,分段控件被正确地动画回其全宽。我自己不处理任何动画。为什么滑块没有动画?我的设置代码如下。有什么想法吗?

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

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

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];

【问题讨论】:

【参考方案1】:

我找到了解决方案。显然,使用调整大小蒙版允许滑块在删除按钮出现时调整大小存在一些问题。相反,我删除了灵活的宽度调整蒙版。我在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);

【讨论】:

以上是关于删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画的主要内容,如果未能解决你的问题,请参考以下文章

Obj-C - 点击自定义表格视图单元格中的删除表格视图行按钮

快速滚动ios时自定义单元格中的UITextField值出现问题

如何删除表格视图单元格中单选按钮的索引路径?

自定义表格单元格中的堆栈视图

在表格视图单元格中使用按钮出列单元格

从表格视图单元格中删除 UIlabel 文本