次のコードを使用して、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];
次の画像でわかるように、すべてが正常に見えます。また、他のセグメントも切り替え時に見栄えがします。
しかし、3番目のセグメントから最初のセグメントに切り替えると、セグメントの仕切りが間違っています(右端に丸い角がないため、正しい仕切りではありません)。
セグメント化されたコントロールにさらに多くのセグメントがある場合、これは3番目のセグメントから最初のセグメントに切り替えるときに常に(そしてのみ)発生します。
valueChanged:イベントの後にsetNeedsLayoutメッセージをUISegmentedControlオブジェクトに送信すると、表示が修正されることがわかりました。
さて、セグメント化されたコントロールをカスタマイズする方法に何か問題がありますか、それは既知のバグですか、それともこれを1つとして報告する必要がありますか?