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

标签 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];     
}

最佳答案

我不是 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”时更改段控件的色调颜色。当我的应用程序中的颜色一致性受到损害时,我真的很喜欢这种变化。

临时和肮脏的修复可能是将瞬时状态检查为是。这将使它只有一秒钟的蓝色,而您的自定义图像仍会使它看起来像是被选中的。

关于ios - iOS6 中的 UISegmentedControl 图像突出显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14810493/

相关文章:

ios - 上传到 itunesconnect with bitcode open 后找不到 iOS app main target symbol 文件

iphone - Mac 在 MonoTouch 和 XCode 中开发的系统要求

objective-c - 使用 Cocoa/objective-C 从整数(年 ... 秒)构建 NSDate

objective-c - 检测选择器的签名

iphone - 在普通样式的 UITableView 中更改自定义 UITableViewCell 单元格的背景颜色

iphone - 在设备上运行 iPhone 应用程序时出错

ios - 如何修改或更改 PopoverPresentationController 的大小?

objective-c - 什么是 Objective-C Cocoa 中的关键窗口?

ios - 带 anchor 的自动布局边距

android - 如何在flutter中实现类似LinearLayout的布局?