2012-08-04 25 views
1

我用下面的代碼定製一個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_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]; 

一切都看起來不錯,你可以在下面的圖片中看到,也切換時,其他段好看:

correct_image

但是當我從第三段切換到第一段時,段分隔符是錯誤的(右端沒有圓角,所以不是正確的分隔符)。

wrong_image

如果分段控制具有多個段,這種情況總是(只)從第三節段到第一切換時。

我發現該的valueChanged後發送setNeedsLayout消息給UISegmentedControl對象:事件校正的顯示。

現在,我定製分段控件的方式有什麼問題嗎?它是已知的錯誤還是我應該報告爲一個?

+0

它報告的bug記者。 – 2012-08-04 11:33:35

回答

0

有點醜陋的解決方法,但我設法修復它,直到蘋果修復它本身。

首先,你需要繼承UISegmentedControl並添加以下內容:

@implementation MJSegmentedControl 

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    NSInteger cachedIndex = self.selectedSegmentIndex; 
    self.selectedSegmentIndex = 0; 
    self.selectedSegmentIndex = cachedIndex; 
} 

@end 
+0

在ios7下不起作用 – choise 2013-09-11 09:06:47