Menggunakan [UIColor colorWithRed: green: blue: alpha:] tidak berfungsi dengan UITableView seperatorColor?

86

Saya mencoba mengonfigurasi warna pemisah abu-abu tua. Mengapa hal berikut tidak melakukan apa-apa?

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

mengembalikan tabel tanpa pemisah sama sekali.

Segera setelah saya menggunakan [UIColor blackColor] maka saya mendapatkan pemisah dengan baik. Apa masalahnya?

skålfyfan
sumber

Jawaban:

211

Anda perlu membagi 255.0

Karena saya hampir tidak pernah menggunakan nilai antara 1.0 dan 0.0, saya membuat kategori UIColor yang sangat sederhana yang melakukan pembagian yang tampak berantakan dengan sendirinya: (dari 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

Jadi Anda bisa melakukannya (Jika Anda mengimpor kategori yang saya tautkan di atas):

[UIColor colorWithR:127 G:127: B:127 A:1];
Jonathan.
sumber
5
Apakah nilai standar 0-1 di industri? Anda dapat membuka aplikasi pengeditan foto apa pun dan pemilih warna memberi Anda nilai dari 0-255, terlepas dari apa pun saya penasaran mengapa mereka membuat Anda melakukan pekerjaan ekstra untuk membagi?
The Muffin Man
1
@ Nick - itu pertanyaan yang bagus. Saya menduga itu karena UIColorperlu mendukung 'warna dalam' (yaitu, warna dengan kedalaman lebih dari 24 bit, atau 32 dengan alfa). Tentu saja, itu masih tidak mengubah fakta bahwa metode kenyamanan bawaan (bersama dengan dukungan hex) jelas akan sangat membantu banyak pengembang!
lxt
juga, hal yang sama berlaku untuk nilai hex. karena terkadang kita mendapatkan warna sebagai hex, agar tidak menghitungnya dengan tangan kita dapat menggunakan: misalnya untuk # C94557 ini akan menjadi: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF green: (CGFloat) 0x45 / 0xFF blue: (CGFloat) 0x57 / 0xFF alpha: 1.0];
memical
Ada dua metode baru di UIColor yang menerima nilai integer dari 0 hingga 255. Lihat jawaban saya di bawah ini.
Blip
59

Karena metode UIColor Anda membutuhkan float dari 0-1, bukan 0-255. Anda perlu membagi semua nilai RGB Anda dengan 255,0, sebagai berikut:

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

Anda harus membagi nilai Anda dengan 255, karena kisarannya 0-1. Ambil 127/255 = 0.49f dan ketik itu sebagai gantinya. Itu ada di sana, hanya putih :)

sunting: penyebab komentar, saya menambahkan beberapa kode tentang bagaimana saya menyelesaikannya:

-(float)getRGBValue:(int) rgbValue{  
    return rgbValue/255.0;
]
Stian Storrvik
sumber
1

Ada dua metode baru UIColoryang menerima nilai integer dari 0 hingga 255:

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

dan

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

Ini tidak ada dalam dokumentasi tetapi saya telah menggunakannya dan berfungsi dengan sangat baik.

Blip
sumber