Використання [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.