L'utilisation de [UIColor colorWithRed: green: blue: alpha:] ne fonctionne pas avec UITableView seperatorColor?

86

J'essaye de configurer une couleur de séparateur gris foncé. Pourquoi ce qui suit ne fait rien?

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

renvoie une table sans séparateurs du tout.

Dès que j'utilise [UIColor blackColor], j'obtiens très bien des séparateurs . Quel est le problème?

skålfyfan
la source

Réponses:

211

Vous devez diviser par 255.0

Parce que je n'utilise presque jamais de valeurs entre 1.0 et 0.0, j'ai créé une catégorie UIColor très simple qui fait la division en désordre par elle-même: (à partir de 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

Vous pouvez donc simplement faire (si vous importez la catégorie à laquelle j'ai lié ci-dessus):

[UIColor colorWithR:127 G:127: B:127 A:1];
Jonathan.
la source
5
Une valeur de 0-1 est-elle la norme dans l'industrie? Vous pouvez ouvrir n'importe quelle application de retouche photo et le sélecteur de couleurs vous donne une valeur de 0 à 255, peu importe si je suis curieux de savoir pourquoi ils vous obligeraient à faire le travail supplémentaire en divisant?
The Muffin Man
1
@Nick - c'est une bonne question. Je soupçonne que c'est parce qu'il UIColordoit prendre en charge la `` couleur profonde '' (c'est-à-dire les couleurs avec une profondeur supérieure à 24 bits, ou 32 avec alpha). Bien sûr, cela ne change toujours pas le fait qu'une méthode de commodité intégrée (avec le support hexadécimal) serait clairement très utile pour de nombreux développeurs!
lxt
également, la même chose fonctionne pour les valeurs hexadécimales. comme parfois nous obtenons les couleurs en hexadécimal, afin de ne pas les calculer à la main, nous pouvons utiliser: par exemple pour # C94557 ce serait: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF green: (CGFloat) 0x45 / 0xFF blue: (CGFloat) 0x57 / 0xFF alpha: 1.0];
memical
Il existe deux nouvelles méthodes dans UIColor qui acceptent des valeurs entières de 0 à 255. Voir ma réponse ci-dessous.
Blip le
59

Parce que votre méthode UIColor nécessite un flottant de 0 à 1 et non de 0 à 255. Vous devez diviser toutes vos valeurs RVB par 255,0, comme suit:

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

Vous devez diviser vos valeurs par 255, car la plage est 0-1. Prenez 127/255 = 0.49f et saisissez-le à la place. C'est là, c'est juste blanc :)

edit: à cause des commentaires, j'ai ajouté du code pour savoir comment je le résous:

-(float)getRGBValue:(int) rgbValue{  
    return rgbValue/255.0;
]
Stian Storrvik
la source
1

Il existe deux nouvelles méthodes UIColorqui acceptent les valeurs entières de 0 à 255:

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

et

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

Ce n'est pas dans la documentation mais je l'ai utilisé et cela fonctionne à merveille.

Spot
la source