UISlider setMaximumTrackTintColor在iOS 7.1中

[slider setMaximumTrackTintColor: color] 

在iOS 7.1中出现了意想不到的结果(滑动条改变了它的位置,而不是垂直居中,或者完全消失),而在以前的版本中工作正常。

 [slider setMinimumTrackTintColor: color] 

确实呈现预期的结果。

这个问题可能是相关的: UISlider setMaximumTrackTintColor ,但目前为止没有答案。

更新:

我得到这个: 错误 代替: 在这里输入图像说明

更新#2:

使用setMaximumTrackImage可能工作,但我正在寻找的解决scheme是一种方法来设置任何随机的颜色,而不是一个预先存在的图像。

更新#3:

这个问题在iOS 7.1.1中仍然存在。

find这个workaroud:

UIColor创build一个1x1px的UIImage

 CGRect rect = CGRectMake(0, 0, 1, 1); UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); [color setFill]; UIRectFill(rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

接着

 [slider setMaximumTrackImage:image forState:UIControlStateNormal]; 

看起来像一个昂贵的解决scheme,但它完成了工作。

试试这个:

 UIImage *sliderLeftTrackImage = [[UIImage imageNamed:@"LeftImage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; UIImage *sliderRightTrackImage = [[UIImage imageNamed:@"RightImage.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [sliderName setMinimumTrackImage: sliderLeftTrackImage forState: UIControlStateNormal]; [sliderName setMaximumTrackImage: sliderRightTrackImage forState: UIControlStateNormal]; 

如果你想改变拇指图像,下面的代码将工作:

 [sliderName setThumbImage:[UIImage imageNamed:@"ThumbImgName.png"] forState:UIControlStateNormal]; [sliderName setThumbImage:[UIImage imageNamed:@"ThumbImgName.png"] forState:UIControlStateHighlighted]; 

以同样的方式,你也可以使用颜色,而不是图像。

我用滑块轨道的颜色创build了2px图像。

在这里输入图像说明

然后我将它们设置为跟踪图像(这里是iPad和iPhone的拇指图像)

 UIImage *thumbImage = [UIImage imageNamed:@"slider"]; UIImage *trackImage; if (isiPad) { [[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateNormal]; [[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateHighlighted]; trackImage = [UIImage imageNamed:@"menu-bar-ipad"]; } else { [[UISlider appearance] setThumbImage:[self imageWithImage:thumbImage scaledToSize:CGSizeMake(27, 27)] forState:UIControlStateNormal]; [[UISlider appearance] setThumbImage:[self imageWithImage:thumbImage scaledToSize:CGSizeMake(27, 27)] forState:UIControlStateHighlighted]; trackImage = [UIImage imageNamed:@"menu-bar"]; } [[UISlider appearance] setMinimumTrackImage:trackImage forState:UIControlStateNormal]; [[UISlider appearance] setMaximumTrackImage:trackImage forState:UIControlStateNormal]; 

就这样。 我想,和msmq一样的解决scheme。 而且,您可以同时看到如何制作大图像 – 两种图像方式和缩放方式。

更新

报告了这个bug,它已经是众所周知的了。 希望他们能尽快解决

也许有点晚,但是 – 这是答案

你应该阅读setter的描述:

用于给标准最大跟踪图像着色的颜色。 设置此属性将删除与滑块关联的所有自定义最大轨道图像。

也适用于maximum color ,因为minimum setter只是改变titntColor:

用于给标准最小轨道图像着色的颜色。

这意味着滑块使用一些图像的最大限度的轨道,如果你只是设置色调的颜色没有什么会改变(没有不能被着色)。

在这里输入图像说明

解决scheme(感谢@ user623396):

 UIImage *currentSliderMaximumImage = self.slider.currentMaximumTrackImage; CGRect rect = CGRectMake(0, 0, currentSliderMaximumImage.size.width, currentSliderMaximumImage.size.height); UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); [[[DynamicUIService service] currentApplicationColor] setFill]; UIRectFill(rect); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [self.slider setMaximumTrackImage:image forState:UIControlStateNormal]; 

结果你会得到

在这里输入图像说明