使用[UIColor colorWithRed:green:blue:alpha:]无法与UITableView seperatorColor一起使用吗?


86

我正在尝试配置深灰色的分隔符颜色。为什么以下什么都不做?

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

返回一个根本没有分隔符的表。

一旦使用[UIColor blackColor],我就可以使用分隔符了。这是怎么回事?

Answers:


211

你需要除以 255.0

因为我几乎从未使用过1.0到0.0之间的值,所以我创建了一个非常简单的UIColor类别,该类别本身进行了凌乱的划分:(来自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

因此,您可以这样做(如果您导入我上面链接的类别):

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

5
业界标准值为0-1吗?您可以打开任何照片编辑应用程序,并且颜色选择器会为您提供0-255之间的值,无论我是否好奇它们为什么会让您进行额外的划分工作?
松饼人

1
@Nick-这是一个好问题。我怀疑这是因为UIColor需要支持“深色”(即深度大于24位的颜色,或具有alpha的32以上的颜色)。当然,这仍然不会改变以下事实:内置的便捷方法(以及hex支持)显然对许多开发人员都非常有帮助!
2013年

同样,对于十六进制值也是如此。有时我们会得到十六进制的颜色,为了不手工计算它们,我们可以使用:例如对于#C94557,它将是:[UIColor colorWithRed:(CGFloat)0xC9 / 0xFF绿色:(CGFloat)0x45 / 0xFF蓝色: (CGFloat)0x57 / 0xFF alpha:1.0];
记忆

UIColor中有两个新方法可以接受0到255之间的整数值。请参见下面的答案。
Blip

59

因为您的UIColor方法要求浮点为0-1,而不是0-255。您需要将所有RGB值除以255.0,如下所示:

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

3

您必须将值除以255,因为范围是0-1。取127/255 = 0.49f并输入。在那里,只有白色:)

编辑:注释的原因,我添加了一些有关如何解决它的代码:

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

1

有两种新方法UIColor可以接受0到255之间的整数值:

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

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

它不在文档中,但我已经使用过了,它的工作原理就像一个魅力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.