UISegmentedControl图像突出显示iOS6中的错误

时间:2013-02-11 10:40:46

标签: ios objective-c cocoa-touch uisegmentedcontrol

目前我有一个小的分段控件,有3个独立的段。

我想要做的是,如果选择此选项,请将该特定细分的图像更改为其他图像。

到目前为止,我已经设法使它与我想要的非常相似,并且在选择时会显示新图像,但新图像的一小部分被蓝色突出显示(如下所示),无论如何我尝试了什么,我无法摆脱它:

出于某种原因,突出显示会覆盖部分图像。

我想知道如何在选中时完全禁用分段控件的任何突出显示/更改,或任何其他可以实现我的问题的选项。

到目前为止我尝试过:

我的代码(如您所见,只测试任何所选按钮的一个图像):

-(IBAction)languageChanged:(UISegmentedControl *)sender {
    UISegmentedControl *segmentControl = [[UISegmentedControl alloc] init];
    [segmentControl addTarget:self action:@selector(segmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:segmentControl];

    [sender setImage:[UIImage imageNamed:@"rsz_langue-francais-on.png"] forSegmentAtIndex:sender.selectedSegmentIndex];     
}

2 个答案:

答案 0 :(得分:4)

我不是100%确定这是否有效,但分段颜色由tintColor确定。

因此,您只需将tintColor设置为[UIColor clearColor];

即可

修改

我已经读过iOS6及以上版本的问题。要解决问题,请为每个单独的部分设置宽度,而不是整个分段控件。

以下是宽度为180的UISegmentedControl的一些示例(未经测试)代码:

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 6.0) {
    [[UISegmentedControl appearance] setWidth:90 forSegmentAtIndex:0];
    [[UISegmentedControl appearance] setWidth:90 forSegmentAtIndex:1];
}
else{
    segmentedControl.frame = CGRectMake(0, 0, 180, 30);
}

编辑2:

当样式设置为“Bar”而不是“Plain”时,我只能更改段控制色调颜色。由于我的应用程序中的颜色一致性受到影响,我很快就会对此进行更改。

临时和脏的修复可以检查瞬间状态为YES。这将使其仅为蓝色一秒钟,您的自定义图像仍然会使它看起来被选中。

答案 1 :(得分:2)

最后,我能够修复的唯一方法(可能避免使用更好的词)问题是将uisegmentedcontrol的样式从“ Plain ”更改为'',删除了段之间突出显示的蓝色间距,就像Patrick上面提到的那样。我听说这是一个已知的iOS6错误,希望它很快得到解决。