这是一个微妙的问题:我有一个带滑块和分段控件的自定义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];
答案 0 :(得分:0)
我发现了解决方法。显然,在出现删除按钮时,使用调整大小蒙版允许滑块调整大小时会出现问题。相反,我删除了灵活的宽度调整大小掩码。我在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);
}