85

I'm trying to configure a dark gray seperator color. Why does the following do nothing?

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

returns a table with no seperators at all.

As soon as I use [UIColor blackColor] then I get seperators just fine. What's the deal?

Jonathan.
  • 53,997
  • 54
  • 186
  • 290
skålfyfan
  • 4,931
  • 5
  • 41
  • 59

4 Answers4

210

You need to divide by 255.0

Because I hardly ever use values between 1.0 and 0.0, I created a very simple UIColor category that does the messy looking division by itself: (from 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

So you can just do(If you import the category I linked to above):

[UIColor colorWithR:127 G:127: B:127 A:1];
Jonathan.
  • 53,997
  • 54
  • 186
  • 290
  • 5
    Is a value of 0-1 standard in the industry? You can open up any photo editing application and the color picker gives you a value from 0-255, regardless I'm curious as to why they would make you do the extra work dividing? – The Muffin Man Jun 13 '13 at 05:41
  • 1
    @Nick - that's a good question. I suspect it's because `UIColor` needs to support 'deep color' (that is, colors with a depth greater than 24 bit, or 32 with alpha). Of course, that still doesn't change the fact a built-in convenience method (along with hex support) would clearly be quite helpful to many developers! – lxt Aug 03 '13 at 20:53
  • also, the same works for hex values. as sometimes we get the colors as hex, in order to not calculate them by hand we can use: for example for #C94557 it would be: [UIColor colorWithRed:(CGFloat)0xC9/0xFF green:(CGFloat)0x45/0xFF blue:(CGFloat)0x57/0xFF alpha:1.0]; – memical Jan 23 '16 at 13:17
  • There are two new methods in UIColor that accept integer values from 0 to 255. See my answer below. – Blip Sep 26 '19 at 20:48
59

Because your UIColor method requires a float from 0-1, not 0-255. You need to divide all your RGB values by 255.0, as follows:

self.tableView.seperatorColor = [UIColor colorWithRed:127.0f/255.0f green:127.0f/255.0f blue:127.0f/255.0f alpha:1.0f];
Till
  • 27,559
  • 13
  • 88
  • 122
lxt
  • 31,146
  • 5
  • 78
  • 83
3

You have to divide your values with 255, because the range is 0-1. Take 127/255 = 0.49f and type in that instead. It's there, it's just white :)

edit: cause of comments, I added some code as to how I solve it:

-(float)getRGBValue:(int) rgbValue{  
    return rgbValue/255.0;
]
Stian Storrvik
  • 2,199
  • 2
  • 14
  • 21
1

There are two new methods in UIColor that accept integer values from 0 to 255:

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

and

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

It's not in the documentation but I've used it and it works like a charm.

Blip
  • 1,158
  • 1
  • 14
  • 35