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.