Używanie [UIColor colorWithRed: green: blue: alpha:] nie działa z UITableView seperatorColor?

86

Próbuję skonfigurować ciemnoszary kolor separatora. Dlaczego poniższe nic nie robią?

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

zwraca tabelę bez żadnych separatorów.

Jak tylko użyję [UIColor blackColor] , separatory są w porządku. O co chodzi?

skålfyfan
źródło

Odpowiedzi:

211

Musisz podzielić 255.0

Ponieważ prawie nigdy nie używam wartości między 1,0 a 0,0, utworzyłem bardzo prostą kategorię UIColor, która sama wykonuje niechlujnie wyglądający podział: (z 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

Możesz więc po prostu zrobić (jeśli zaimportujesz kategorię, do której dołączyłem powyżej):

[UIColor colorWithR:127 G:127: B:127 A:1];
Jonathan.
źródło
5
Czy w branży wartość standardu 0-1? Możesz otworzyć dowolną aplikację do edycji zdjęć, a próbnik kolorów podaje wartość od 0 do 255, niezależnie od tego, dlaczego jestem ciekawy, dlaczego zmuszają Cię do dodatkowej pracy przy dzieleniu?
The Muffin Man
1
@Nick - to dobre pytanie. Podejrzewam, że to dlatego, że UIColormusi obsługiwać „głęboki kolor” (czyli kolory o głębi większej niż 24 bity lub 32 z alfa). Oczywiście to nadal nie zmienia faktu, że wbudowana wygodna metoda (wraz z obsługą szesnastkową) byłaby bardzo pomocna dla wielu programistów!
lxt
to samo dotyczy wartości szesnastkowych. ponieważ czasami otrzymujemy kolory w postaci szesnastkowej, aby nie obliczyć ich ręcznie, możemy użyć: na przykład dla # C94557 będzie to: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF green: (CGFloat) 0x45 / 0xFF blue: (CGFloat) 0x57 / 0xFF alfa: 1.0];
pamiętny
W UIColor są dwie nowe metody, które akceptują liczby całkowite od 0 do 255. Zobacz moją odpowiedź poniżej.
Blip
59

Ponieważ Twoja metoda UIColor wymaga wartości zmiennoprzecinkowej z zakresu 0-1, a nie 0-255. Musisz podzielić wszystkie wartości RGB przez 255,0 w następujący sposób:

self.tableView.seperatorColor = [UIColor colorWithRed:127.0f/255.0f green:127.0f/255.0f blue:127.0f/255.0f alpha:1.0f];
lxt
źródło
3

Musisz podzielić swoje wartości przez 255, ponieważ zakres wynosi 0-1. Weź 127/255 = 0,49f i wpisz to zamiast tego. Jest tam, jest po prostu biały :)

edycja: przyczyna komentarzy, dodałem kod, jak to rozwiązać:

-(float)getRGBValue:(int) rgbValue{  
    return rgbValue/255.0;
]
Stian Storrvik
źródło
1

Istnieją dwie nowe metody, UIColorktóre akceptują wartości całkowite od 0 do 255:

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

i

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

Nie ma tego w dokumentacji, ale użyłem go i działa jak urok.

Punkcik na ekranie
źródło