2014-09-29 5 views
8

In iOS 6/7, ho usato UISegmentedControl con immagini di sfondo per creare un effetto in questo modo:Perché i segmenti di UISegmentControl vengono evidenziati in iOS 8 quando sono state impostate le immagini di sfondo per tutti gli stati?

Customized UISegmentedControl

ho compiuto questo impostando l'immagine di sfondo per la UISegmentedControl per ciascuno degli stati standard, in questo modo :

UIImage *segmentedControlBackgroundImage = [UIImage imageNamed:@"profileSegmentedControlBackground"]; 
UIImage *segmentedControlBackgroundSelectedImage = [UIImage imageNamed:@"profileSegmentedControlBackgroundSelected"]; 

[self.segmentedControl setBackgroundImage:segmentedControlBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundImage forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault]; 
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

Quando un segmento diventa selezionare o è evidenziato, ha la bella barra blu sotto e ho impostato gli attributi di testo per modificare il colore del testo per essere blu. C'è un codice extra per i divisori, ma penso che non sia correlato, quindi l'ho omesso.

Il mio problema è che in iOS 8 ci sono un paio di azioni che fanno diventare grigio lo sfondo del segmento e appaiono scadenti; Uno è quando cambi la tua selezione, la cella che hai toccato diventa grigia fino al completamento della transizione, e l'altra è che se tocchi e tieni premuto un segmento già selezionato, diventa grigio. Entrambi sembrano identici e possono essere visti sotto.

UISegmentedControl with strange highlighting

Alcuni pezzi extra di informazioni eventualmente rilevanti:

  • Il tintColor per il segmentedControl è chiaro
  • Non sto sottoclasse UISegmentedControl
  • Non ho cambiato tutte le proprietà per UISegmentedControl utilizzando il suo proxy di aspetto
  • Sto usando immagini a 1 punto di larghezza per immagini di sfondo e e UISegmentedControl viene determinato automaticamente l'capInsets e piastrelle dell'immagine
+0

sto trovando anche questo. Hai mai trovato una soluzione al tuo problema? – GraemeArthur

+0

No. La cosa migliore che potevo fare era assicurarsi che accadesse pochissimo sul thread principale dopo aver cambiato le schede in modo che apparisse in modo non omogeneo per il minor tempo possibile. – Acey

risposta

11

La ragione segmento diventa grigio sulla selezione di un segmento già selezionato è perché il controllo segmentato manca lo stato per selezionato ed evidenziato allo stesso tempo.

Nel tuo caso chiamando:

[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; 

dovrebbe risolvere il problema.

quando si cambia la selezione, la cella si è toccato diventa grigia fino la transizione completa

non riuscivo a riprodurre quella, ma forse questo risolverà entrambe le questioni.

+0

Grande che l'ha fatto! E sì, ha risolto entrambi i problemi. Grazie per l'aiuto. Che strana API. Sto personalizzando anche le immagini dei divisori, quindi questo raddoppierà le linee necessarie per quella personalizzazione. – Acey

+0

Non mi sono mai accorto che gli stati potevano essere mascherati insieme. Grazie per nulla Apple doc! – Brenden

6

Solo nel caso, a Swift che sarebbe

segmentedControl.setBackgroundImage(image, forState:[.Selected, .Highlighted], barMetrics:.Default)

+1

GRAZIE! Come fanno le persone a capire cose come queste? I documenti non sono di aiuto. – Brenden

Problemi correlati