2009-12-02 69 views

回答

4

不,沒有API可以讓您控制段的佈局。

你也許可以試着查看UISegmentedControl的view.subviews,並根據你的需要嘗試改變它們。但從個人經驗來看,我不會這麼建議。如果蘋果未來改變了他們的訂單,你的應用可能會崩潰。最簡單的事情就是創建自定義的UIButtons,它們像切換按鈕一樣控制它們並像UISegmentedControls一樣控制它們(切換按鈕參見How to use a UIButton as a toggle switch)。

1

如果你想要一個不同的外觀,你可以繼承它,並在-drawRect:做你自己的繪圖。使用Quartz/Core Graphics進行繪圖時參考Quartz 2D Programming Guide

20

有一些很容易,你可以做些什麼來擺脫自己對UISegmentedControl圓形的垃圾......樣式更改爲「7」。我不是在開玩笑。我想通了這一點:

// Magic number ... (it's cheating, but it works) 
    mySegmentedBar.segmentedControlStyle = 7; 

這是他們在的UISearchBar的範圍欄使用相同的控制風格,就像這樣:

Search Bar With Scope

但是,如果有人只想範圍吧,沒有搜索,他們通常堅持UISegmentedControl垃圾這樣的(帶有圓角):

BarStyle

或者更糟的是,這...

BezeledStyle

值得慶幸的是,通過切換到酒吧式的「7」,我們得到了停止線的確切外觀,沒有所有的子類和的drawRect兩輪牛車:

enter image description here

+1

這就像魔術。 – Joel 2012-05-17 04:29:13

+4

這是否被認爲是私人API? – jjxtra 2012-11-26 22:21:47

+0

@GregCombs它已經有一段時間了,想請你回答一下這個^,只要你有時間 – GangstaGraham 2013-08-28 14:07:41

0

經過大量嘗試我得到了以下的解決方案,沒有任何背景圖像或子類化工作正常的:

mySegmentedControl.tintColor = [UIColor clearColor]; //Clear all border 

    //Draw your own border 
    mySegmentedControl.layer.borderColor = [UIColor blackColor].CGColor; 
    mySegmentedControl.layer.borderWidth = 1.0; 

    //Set tint color for selected subview 
    UIColor *tintcolor=[UIColor redColor]; 
    int subViewIndex = 0; //index which is selected 
    [[_segmentControl.subviews objectAtIndex:subViewIndex] setTintColor:tintcolor]; 
1

通過添加一個合理寬度的邊框,你可以得到平方:

self.segmentedControl.tintColor = [UIColor brownColor]; 
self.segmentedControl.layer.cornerRadius = 0.0; 
self.segmentedControl.layer.borderColor = [UIColor brownColor].CGColor; 
self.segmentedControl.layer.backgroundColor = [UIColor colorWithWhite:1 alpha:0.75].CGColor; 
self.segmentedControl.layer.borderWidth = 1.5f; 
self.segmentedControl.layer.masksToBounds = YES;