我使用以下代码自定义了 UISegmentedControl 的外观:
UIImage *bg = [UIImage imageNamed:@"segment_bg"];
UIImage *bg_sel = [UIImage imageNamed:@"segment_sel"];
UIImage *leftSep = [UIImage imageNamed:@"segment_div_sx"];
UIImage *rightSep = [UIImage imageNamed:@"segment_div_dx"];
UIEdgeInsets selectionInsets = UIEdgeInsetsMake(0, 8, 0, 8);
[self.segmentedControl setBackgroundImage:[bg resizableImageWithCapInsets:UIEdgeInsetsZero]
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:[bg_sel resizableImageWithCapInsets:selectionInsets]
forState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:[bg resizableImageWithCapInsets:UIEdgeInsetsZero]
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[self.segmentedControl setDividerImage:[bg resizableImageWithCapInsets:UIEdgeInsetsZero]
forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[self.segmentedControl setDividerImage:rightSep
forLeftSegmentState:UIControlStateSelected
rightSegmentState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[self.segmentedControl setDividerImage:leftSep
forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];
如下图所示,一切看起来都很好,切换时其他部分看起来也不错:
但是当我从第三段切换到第一段时,段分隔器是错误的(右端没有圆角,所以不是正确的分隔器)。
如果分段控件有更多段,则总是(并且仅)在从第三段切换到第一段时发生这种情况。
我发现在valueChanged:事件更正显示之后将setNeedsLayout消息发送到 UISegmentedControl 对象。
现在,我自定义分段控件的方式有问题吗?它是一个已知的错误还是我应该将其报告为一个错误?