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

时间:2014-09-29 23:58:07

标签: ios ios8 uisegmentedcontrol

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

Customized 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];

当一个片段变为选中或突出显示时,它下方有一个漂亮的蓝色条,我设置了文本属性以将文本颜色更改为蓝色。除了分隔符之外还有一些额外的代码,但我认为这是不相关的,所以我省略了它。

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

UISegmentedControl with strange highlighting

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

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

2 个答案:

答案 0 :(得分:12)

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

在您的情况下致电:

[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

应该解决这个问题。

  

当您更改选择时,您点按的单元格将变为灰色   过渡完成

我无法重现那个,但也许这将解决这两个问题。

答案 1 :(得分:6)

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

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

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