2009-12-02 13 views

risposta

4

No, non esiste un'API che ti dia il controllo sul layout dei segmenti.

Probabilmente si potrebbe provare a esaminare le viewview di UISegmentedControl e provare a modificarle in base alle proprie esigenze. Ma per esperienza personale non lo consiglierei. Se Apple cambierà il loro ordine in futuro, probabilmente l'app si bloccherà. La cosa più semplice da fare è creare UIButtons personalizzati che si comportano come pulsanti di attivazione e controllo come un UISegmentedControls (per i pulsanti di attivazione vedere How to use a UIButton as a toggle switch).

1

Se si desidera un aspetto diverso, è possibile creare una sottoclasse e creare il proprio disegno in -drawRect:. Vedi lo Quartz 2D Programming Guide come riferimento sul disegno con Quartz/Core Graphics.

20

C'è qualcosa veramente facile che si può fare per sbarazzarsi della spazzatura arrotondata sul UISegmentedControl ... cambiare lo stile di "7". Non sto scherzando. Ho appena capito questo:

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

Questo è lo stesso stile di controllo che usano in bar campo di applicazione della UISearchBar, in questo modo:

Search Bar With Scope

Ma se qualcuno vuole solo la barra campo di applicazione, senza la di ricerca, sono di solito bloccato con UISegmentedControl spazzatura come questo (con angoli arrotondati):

BarStyle

O peggio, questo ...

BezeledStyle

Per fortuna, passando al bar in stile "7", si ottiene l'esatto aspetto della barra di arresto, senza tutta la sottoclasse e drawRect aggiustamenti:

enter image description here

+1

È come per magia. – Joel

+4

Questa è considerata API privata? – jjxtra

+0

@GregCombs è passato un po 'di tempo, vorrei una risposta su questo^per favore, ogni volta che hai il tempo – GangstaGraham

0

Dopo un sacco di tentativi che ho ricevuto sotto soluzione che funziona bene senza alcuna immagine di sfondo o subclassing:

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

Aggiungendo un bordo di larghezza ragionevole è possibile ottenere l'aspetto quadrato:

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; 
Problemi correlati