L'utilizzo di [UIColor colorWithRed: green: blue: alpha:] non funziona con UITableView seperatorColor?


86

Sto cercando di configurare un colore separatore grigio scuro. Perché quanto segue non fa nulla?

self.tableView.seperatorStyle = UITableViewCellSeperatorStyleSingleLine;
self.tableView.seperatorColor = [UIColor colorWithRed: 127 green:127 blue:127 alpha:1];

restituisce una tabella senza separatori.

Non appena uso [UIColor blackColor] ottengo i separatori benissimo. Qual è l'accordo?

Risposte:


211

Devi dividere per 255.0

Poiché non uso quasi mai valori compresi tra 1.0 e 0.0, ho creato una categoria UIColor molto semplice che esegue da sola la divisione dall'aspetto disordinato: (da http://github.com/Jon889/JPGeneral )

//.h file
@interface UIColor (JPExtras)
+ (UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue A:(CGFloat)alpha;
@end

//.m file
@implementation UIColor (JPExtras)
+ (UIColor *)colorWithR:(CGFloat)red G:(CGFloat)green B:(CGFloat)blue A:(CGFloat)alpha {
    return [UIColor colorWithRed:(red/255.0) green:(green/255.0) blue:(blue/255.0) alpha:alpha];
}
@end

Quindi puoi semplicemente fare (se importi la categoria a cui ho collegato sopra):

[UIColor colorWithR:127 G:127: B:127 A:1];

5
È un valore di 0-1 standard nel settore? Puoi aprire qualsiasi applicazione di fotoritocco e il selettore di colori ti dà un valore compreso tra 0 e 255, indipendentemente dal fatto che io sia curioso di sapere perché ti farebbero fare il lavoro extra dividendo?
The Muffin Man

1
@ Nick - questa è una buona domanda. Sospetto che sia perché UIColordeve supportare il "colore profondo" (ovvero, colori con una profondità maggiore di 24 bit o 32 con alfa). Ovviamente, ciò non cambia il fatto che un metodo pratico integrato (insieme al supporto esadecimale) sarebbe chiaramente molto utile per molti sviluppatori!
lxt

inoltre, lo stesso vale per i valori esadecimali. poiché a volte otteniamo i colori come hex, per non calcolarli a mano possiamo usare: ad esempio per # C94557 sarebbe: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF green: (CGFloat) 0x45 / 0xFF blue: (CGFloat) 0x57 / 0xFF alpha: 1.0];
memical

Ci sono due nuovi metodi in UIColor che accettano valori interi da 0 a 255. Vedi la mia risposta di seguito.
Blip

59

Perché il tuo metodo UIColor richiede un float da 0-1, non da 0-255. È necessario dividere tutti i valori RGB per 255,0, come segue:

self.tableView.seperatorColor = [UIColor colorWithRed:127.0f/255.0f green:127.0f/255.0f blue:127.0f/255.0f alpha:1.0f];

3

Devi dividere i tuoi valori con 255, perché l'intervallo è 0-1. Prendi 127/255 = 0.49f e digita quello invece. È lì, è solo bianco :)

modifica: causa dei commenti, ho aggiunto del codice su come risolverlo:

-(float)getRGBValue:(int) rgbValue{  
    return rgbValue/255.0;
]

1

Esistono due nuovi metodi UIColorche accettano valori interi compresi tra 0 e 255:

UIColor(red: Int, green: Int, blue: Int)

e

UIColor(alpha: Float, red: Int, green: Int, blue: Int)

Non è nella documentazione ma l'ho usato e funziona a meraviglia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.