Ios UISegmentedControl错误的自定义处理
我使用以下代码自定义了UISegmentedControl的外观:Ios UISegmentedControl错误的自定义处理,ios,uisegmentedcontrol,Ios,Uisegmentedcontrol,我使用以下代码自定义了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_di
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对象可以更正显示
现在,我定制分段控件的方式是否有问题,这是一个已知的错误,还是我应该将其报告为一个错误?这是一个有点难看的解决方法,但我成功地用以下方法修复了它,直到苹果自己修复了它 首先,需要将UISegmentedControl子类化,并添加以下内容:
@implementation MJSegmentedControl
- (void)layoutSubviews
{
[super layoutSubviews];
NSInteger cachedIndex = self.selectedSegmentIndex;
self.selectedSegmentIndex = 0;
self.selectedSegmentIndex = cachedIndex;
}
@end