El uso de [UIColor colorWithRed: green: blue: alpha:] no funciona con UITableView seperatorColor?


86

Estoy intentando configurar un color de separación gris oscuro. ¿Por qué lo siguiente no hace nada?

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

devuelve una tabla sin separadores.

Tan pronto como uso [UIColor blackColor], obtengo separadores muy bien. ¿Cual es el trato?

Respuestas:


211

Necesitas dividir por 255.0

Debido a que casi nunca uso valores entre 1.0 y 0.0, creé una categoría UIColor muy simple que hace la división de aspecto desordenado por sí misma: (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

Entonces puede hacer (si importa la categoría a la que me vinculé anteriormente):

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

5
¿Es un valor de 0-1 estándar en la industria? Puede abrir cualquier aplicación de edición de fotos y el selector de color le da un valor de 0-255, independientemente de que tenga curiosidad por saber por qué le obligarían a dividir el trabajo adicional.
The Muffin Man

1
@Nick, esa es una buena pregunta. Sospecho que es porque UIColornecesita admitir 'color profundo' (es decir, colores con una profundidad superior a 24 bits o 32 con alfa). Por supuesto, eso aún no cambia el hecho de que un método de conveniencia incorporado (junto con el soporte hexadecimal) sería claramente muy útil para muchos desarrolladores.
lxt

también, lo mismo funciona para valores hexadecimales. como a veces obtenemos los colores como hexadecimales, para no calcularlos a mano podemos usar: por ejemplo para # C94557 sería: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF verde: (CGFloat) 0x45 / 0xFF azul: (CGFloat) 0x57 / 0xFF alpha: 1.0];
memical

Hay dos métodos nuevos en UIColor que aceptan valores enteros de 0 a 255. Vea mi respuesta a continuación.
Blip

59

Porque su método UIColor requiere un valor flotante de 0-1, no de 0-255. Debe dividir todos sus valores RGB por 255.0, de la siguiente manera:

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

3

Tienes que dividir tus valores entre 255, porque el rango es 0-1. Tome 127/255 = 0.49f y escriba eso en su lugar. Está ahí, es solo blanco :)

editar: debido a los comentarios, agregué un código sobre cómo lo resuelvo:

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

1

Hay dos métodos nuevos UIColorque aceptan valores enteros de 0 a 255:

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

y

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

No está en la documentación, pero lo he usado y funciona de maravilla.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.