UISlider 添加到 UITableViewCell 奇怪的行为

UISlider added to a UITableViewCell weird behaviour

我在故事板的单元格中添加了一个滑块。在 cellForRowAtIndexPAth: 中,我获取滑块并以编程方式向滑块的拇指添加标签,然后 return 单元格。代码如下

UISlider *forceDelaySlider = (UISlider *)[cell1 viewWithTag:102];
forceDelaySlider.minimumValue = 0.0;
forceDelaySlider.maximumValue = 10.0;
forceDelaySlider.value = [Settings sharedInstance].forceDelay;

[forceDelaySlider addTarget:self     action:@selector(forceDelaySliderChanged:) forControlEvents:UIControlEventValueChanged];

 UIImageView *handleView = [forceDelaySlider.subviews lastObject];

 if (forceDelaySliderLabel)
 {
    [forceDelaySliderLabel removeFromSuperview];
    forceDelaySliderLabel = nil;
 }

 forceDelaySliderLabel = [[UILabel alloc] initWithFrame:handleView.bounds];
 forceDelaySliderLabel.text = [NSString stringWithFormat:@"%0.0f", forceDelaySlider.value];
 forceDelaySliderLabel.backgroundColor = [UIColor clearColor];
 forceDelaySliderLabel.textAlignment = NSTextAlignmentCenter;
                [forceDelaySliderLabel setTextColor:[UIColor blackColor]];

 [handleView addSubview:forceDelaySliderLabel];

 return cell1,

现在,当 table 出现时,滑块上的标签不会在 table loads.It 出现后出现,如下所示

上下滚动 table 视图后,带有标签的滑块显示如下

为什么会这样?我卡住了。请帮我解决这个奇怪的行为。

首次加载单元格时,[cell1 viewWithTag:102][forceDelaySlider.subviews lastObject] return 是否显示 nil 视图?很可能两者之一在布局或渲染过程之前不存在。


而不是假设 [forceDelaySlider.subviews lastObject] 总是会成为拇指的 UIImageView 你应该子 class UISlider 并添加你自己的 UILabel子视图。然后你可以根据你return从thumbRectForBounds:trackRect:value:的值改变它的位置。此实现将在未来 iOS 版本中由 Apple 对 UISlider class 进行任何重构。