2012-06-25 70 views
5

我正在通過應用程序委託中的這些語句設置分段控件的外觀。UISegmentedControl和UIAppearance的怪異行爲

[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_normal.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] 
     forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalNormal.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalSelected.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_SelectedNormal.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

結果很好。選擇任何分段時,背景和分隔線都會正確設置(應用程序第一次啓動時,默認選擇「分段」)。當我選擇發佈細分時,您可以在下面看到一切都很正常。

enter image description here

問題是,當我出去的視圖然後返回到視圖(I存儲所選擇的索引並將其設置在viewDidLoad中重新選擇段),所述分頻器被設置不正確某些未知原因。

enter image description here

如果我點擊的A-Z,然後鬆開,它是否自行解決。此錯誤僅在視圖第一次加載並且所選片段爲釋放或A-Z時纔會發生。選擇「訂單」並加載視圖時,分隔線總是很好看。

圖像大小:分隔符是2px寬(全部3個圖像大小相同),每個背景寬度爲2 px。

任何想法或指針將高度讚賞,我一直在過去10個小時拉我的頭髮,試圖找到解決方案沒有可用。

+0

在'viewDidLoad'中設置'UISegmentedControl'的選定索引後,調用'UISegmentedControl'的'setNeedsDisplay'方法。也許這將解決這個問題。 –

+0

沒有工作。雖然謝謝! –

+0

我也看到了這個問題。該死的:( – runmad

回答

7

這是UISegmentedControl的錯誤,我想。您可以通過在延遲後設置選定的片段來解決此問題,以便控制時間自行繪製。你甚至不必用一個實際的延遲,只是這樣的:

[self performSelector:@selector(setPreferences) withObject:nil afterDelay:0.0]; 

哪裏setPreferences更新您的分段控制的價值。

+0

它工作得很好,但我不知道這背後的實際原因是什麼? – thesummersign

+1

,因爲它會在第一次運行循環後執行(分段控制已經繪製)!這個bug是已知的錯誤,並在iOS 6中修復了 –

+0

我可以證實這個作品。非常感謝。 – glasz