当我为所有状态设置背景图像时,为什么我的UISegmentControl段在iOS 8中突出显示?

Ace*_*cey 9 uisegmentedcontrol ios ios8

在iOS 6/7中,我使用UISegmentedControl背景图像创建了这样的效果:

自定义UISegmentedControl

我通过UISegmentedControl为每个标准状态设置背景图像来实现这一点,如下所示:

UIImage *segmentedControlBackgroundImage = [UIImage imageNamed:@"profileSegmentedControlBackground"];
UIImage *segmentedControlBackgroundSelectedImage = [UIImage imageNamed:@"profileSegmentedControlBackgroundSelected"];

[self.segmentedControl setBackgroundImage:segmentedControlBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundImage forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

当一个段变为选择或突出显示时,它下方有一个漂亮的蓝色条,我设置文本属性将文本颜色更改为蓝色.分频器有一些额外的代码,但我认为这是无关的,所以我省略了它.

我的问题是在iOS 8中,有一些操作导致段的背景变灰并且看起来很糟糕; 一种是当您更改选择时,您点击的单元格将变为灰色,直到转换完成,另一种情况是,如果您点击并按住已选择的段,则它将变为灰色.两者看起来都相同,可以在下面看到.

带有奇怪突出显示的UISegmentedControl

一些额外的可能相关信息:

  • tintColor为segmentedControl清晰
  • 我不是子类 UISegmentedControl
  • 我没有更改UISegmentedControl使用其外观代理的任何属性
  • 我使用1点宽的图像作为背景图像,UISegmentedControl并自动确定capInsets并平铺图像

Gra*_*hur 13

在选择已经选择的段时段变为灰色的原因是因为分段控件缺少选定状态并同时突出显示.

在你的情况下调用:

[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

应该解决这个问题.

当您更改选择时,您点击的单元格将变为灰色,直到转换完成

我无法复制那个,但也许这将解决这两个问题.


nik*_*ans 7

以防万一,在Swift中将是(UPD for Swift 4)

segmentedControl.setBackgroundImage(image, forState: .selected, barMetrics:.Default)

segmentedControl.setBackgroundImage(image, forState: .highlighted, barMetrics:.Default)