在iOS 6/7中,我使用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中,有一些操作导致细分的背景变灰并且看起来很糟糕;一种是当您更改选择时,您点击的单元格将变为灰色,直到转换完成,另一种情况是,如果您点击并按住已选择的段,则它将变为灰色。两者看起来都相同,可以在下面看到。
可能相关的一些额外信息:
tintColor
是明确的UISegmentedControl
UISegmentedControl
的任何属性
UISegmentedControl
自动确定capInsets并平铺图像答案 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)