Usar [UIColor colorWithRed: green: blue: alpha:] não funciona com UITableView seperatorColor?

86

Estou tentando configurar uma cor de separador cinza escuro. Por que o seguinte não faz nada?

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

retorna uma tabela sem nenhum separador.

Assim que eu uso [UIColor blackColor], então recebo separadores perfeitamente. Qual é o problema?

Skålfyfan
fonte

Respostas:

211

Você precisa dividir por 255.0

Como quase nunca uso valores entre 1.0 e 0.0, criei uma categoria UIColor muito simples que faz a divisão de aparência confusa por si só: (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

Então você pode apenas fazer (se você importar a categoria que vinculei acima):

[UIColor colorWithR:127 G:127: B:127 A:1];
Jonathan.
fonte
5
É um valor de 0-1 padrão na indústria? Você pode abrir qualquer aplicativo de edição de fotos e o seletor de cores fornece um valor de 0 a 255, independentemente de eu estar curioso para saber por que eles fariam você fazer o trabalho extra de divisão?
The Muffin Man
1
@Nick - essa é uma boa pergunta. Suspeito que seja porque UIColorprecisa oferecer suporte a 'cores profundas' (ou seja, cores com profundidade maior que 24 bits ou 32 com alfa). Claro, isso ainda não muda o fato de que um método de conveniência embutido (junto com o suporte hex) seria claramente útil para muitos desenvolvedores!
lxt
também, o mesmo funciona para valores hexadecimais. como às vezes obtemos as cores como hexadecimais, para não calculá-las manualmente podemos usar: por exemplo para # C94557 seria: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF verde: (CGFloat) 0x45 / 0xFF azul: (CGFloat) 0x57 / 0xFF alfa: 1,0];
memical
Existem dois novos métodos em UIColor que aceitam valores inteiros de 0 a 255. Veja minha resposta abaixo.
Blip
59

Porque seu método UIColor requer um float de 0-1, não 0-255. Você precisa dividir todos os seus valores RGB por 255,0, da seguinte maneira:

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

Você deve dividir seus valores por 255, porque o intervalo é 0-1. Pegue 127/255 = 0,49f e digite isso. Está aí, é apenas branco :)

editar: causa dos comentários, adicionei um código para resolver isso:

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

Existem dois novos métodos UIColorque aceitam valores inteiros de 0 a 255:

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

e

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

Não está na documentação, mas eu usei e funciona perfeitamente.

Blip
fonte