C'è un modo per sbarazzarsi degli angoli arrotondati di UISegmentedControl o è il comportamento predefinito?UISegmentedControl senza angolo arrotondato?
risposta
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).
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.
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:
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):
O peggio, questo ...
Per fortuna, passando al bar in stile "7", si ottiene l'esatto aspetto della barra di arresto, senza tutta la sottoclasse e drawRect aggiustamenti:
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];
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;
È come per magia. – Joel
Questa è considerata API privata? – jjxtra
@GregCombs è passato un po 'di tempo, vorrei una risposta su questo^per favore, ogni volta che hai il tempo – GangstaGraham