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

Відповіді:


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
@Nick - це хороше питання. Я підозрюю, що це тому, що UIColorпотрібно підтримувати "глибокий колір" (тобто кольори з глибиною більше 24 біт, або 32 з альфа). Звичайно, це все одно не змінює той факт, що вбудований метод зручності (разом із шістнадцятковою підтримкою) був би явно корисним для багатьох розробників!
lxt

також, те саме працює для шістнадцяткових значень. як іноді ми отримуємо кольори як шістнадцяткові, щоб не обчислювати їх вручну, ми можемо використовувати: наприклад, для # C94557 це буде: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF зелений: (CGFloat) 0x45 / 0xFF синій: (CGFloat) 0x57 / 0xFF альфа: 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)

Цього немає в документації, але я ним користувався, і це працює як шарм.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.