2013-02-27 92 views
2

我正在開發一個iOS項目並遇到了這個奇怪的問題。我有一個風格的UISegmentedControl元素。它有3個部分。段的固定大小爲80.我也有3個圖像,每個段選擇爲背景。下面是them`UISegmentedControl背景圖像奇怪的行爲

enter image description here

當視圖被加載一個,這些段中的一個作爲選擇的設置,該圖像設置爲背景是這樣的:當我運行

[self.genderSelectionButton setBackgroundImage:[UIImage imageNamed:@"gender-switch01.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

現在5.1模擬器項目中,我得到分段按鈕這個扭曲的看法:

enter image description here

正如你可以看到,T他的中間部分保持了我給的尺寸,但是圖像是從中間延伸到邊緣的。 即使已將其設置爲NO,也會突出顯示選定的段。 在偵聽按鈕選擇的方法,我改變的背景圖像,並得到如下: enter image description here

(背景圖像再次拉伸......)

幾乎同樣的情況在iOS6的。 現在我做錯了什麼,或者有沒有辦法解決這個問題?

EDIT

實測值與普通按鈕單獨的圖像,選擇的按鈕和分隔更好地執行。請參閱下面的答案。

+0

這可以幫助ühttp://stackoverflow.com/questions/2270526/uisegmentedcontrol-selected-segment-color – Dhara 2013-02-27 12:09:47

+0

我一般的問題不在於色彩顏色,但拉伸的背景圖像...但無論如何。 – ArVan 2013-02-27 12:17:00

+0

在我的頭頂,我會說這個問題並沒有改變背景圖像,而是將分段控制寬度和分段寬度的計算搞亂了(使用固定寬度有時可以這樣做)。 嘗試搞亂大小,看看它們是否符合您的期望或發佈分段控件創建代碼來掃描它的錯誤。 – Adis 2013-02-27 13:21:55

回答

1

看來,設置完整的背景圖像不是處理自定義分段按鈕的最佳方式。例子發現here

下面是基本的代碼,做一切:

UIImage *segmentSelected = 
    [[UIImage imageNamed:@"segcontrol_sel.png"] 
     resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)]; 
UIImage *segmentUnselected = 
    [[UIImage imageNamed:@"segcontrol_uns.png"] 
     resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)]; 
UIImage *segmentSelectedUnselected = 
    [UIImage imageNamed:@"segcontrol_sel-uns.png"]; 
UIImage *segUnselectedSelected = 
    [UIImage imageNamed:@"segcontrol_uns-sel.png"]; 
UIImage *segmentUnselectedUnselected = 
    [UIImage imageNamed:@"segcontrol_uns-uns.png"]; 

[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected 
    forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected 
    forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

[[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected 
    forLeftSegmentState:UIControlStateNormal 
    rightSegmentState:UIControlStateNormal 
    barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected 
    forLeftSegmentState:UIControlStateSelected 
    rightSegmentState:UIControlStateNormal 
    barMetrics:UIBarMetricsDefault]; 
[[UISegmentedControl appearance] 
    setDividerImage:segUnselectedSelected 
    forLeftSegmentState:UIControlStateNormal 
    rightSegmentState:UIControlStateSelected 
    barMetrics:UIBarMetricsDefault];