Использование [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], я прекрасно получаю разделители . В чем дело?

Skålfyfan
источник

Ответы:

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, несмотря на то, что мне любопытно, почему они заставляют вас выполнять дополнительную работу по разделению?
The Muffin Man
1
@ Ник, это хороший вопрос. Я подозреваю, что это потому, что UIColorнеобходимо поддерживать «глубокий цвет» (то есть цвета с глубиной более 24 бит или 32 с альфа-каналом). Конечно, это все еще не меняет того факта, что встроенный удобный метод (вместе с поддержкой шестнадцатеричного кода) явно будет весьма полезен для многих разработчиков!
lxt 03
также то же самое работает для шестнадцатеричных значений. поскольку иногда мы получаем цвета в шестнадцатеричном формате, чтобы не вычислять их вручную, мы можем использовать: например, для # C94557 это будет: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF зеленый: (CGFloat) 0x45 / 0xFF синий: (CGFloat) 0x57 / 0xFF альфа: 1.0];
memical
В 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];
lxt
источник
3

Вы должны разделить свои значения на 255, потому что диапазон 0-1. Возьмите 127/255 = 0,49f и введите это вместо этого. Он там, он просто белый :)

edit: из-за комментариев я добавил код, чтобы узнать, как я его решаю:

-(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)

Этого нет в документации, но я использовал его, и он работает как шарм.

Blip
источник