Sử dụng [UIColor colorWithRed: green: blue: alpha:] không hoạt động với UITableView seperatorColor?


86

Tôi đang cố định cấu hình một màu xám đậm. Tại sao sau đây không làm gì?

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

trả về một bảng không có trình phân tách nào cả.

Ngay sau khi tôi sử dụng [UIColor blackColor] thì tôi nhận được các bộ tách biệt tốt. Thỏa thuận là gì?

Câu trả lời:


211

Bạn cần chia cho 255.0

Bởi vì tôi hầu như không bao giờ sử dụng các giá trị từ 1,0 đến 0,0, tôi đã tạo một danh mục UIColor rất đơn giản để tự phân chia trông lộn xộn: (từ 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

Vì vậy, bạn chỉ có thể làm (Nếu bạn nhập danh mục tôi đã liên kết ở trên):

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

5
Giá trị 0-1 có phải là tiêu chuẩn trong ngành không? Bạn có thể mở bất kỳ ứng dụng chỉnh sửa ảnh nào và công cụ chọn màu cung cấp cho bạn giá trị từ 0-255, bất kể tôi tò mò là tại sao họ lại bắt bạn làm thêm công việc phân chia?
The Muffin Man,

1
@Nick - đó là một câu hỏi hay. Tôi nghi ngờ đó là vì UIColorcần phải hỗ trợ 'màu sâu' (nghĩa là màu có độ sâu lớn hơn 24 bit hoặc 32 với alpha). Tất nhiên, điều đó vẫn không thay đổi thực tế là một phương pháp tiện lợi tích hợp sẵn (cùng với hỗ trợ hex) rõ ràng sẽ khá hữu ích đối với nhiều nhà phát triển!
tiếp theo

ngoài ra, các giá trị hex cũng tương tự. vì đôi khi chúng ta nhận được màu dưới dạng hex, để không tính toán chúng bằng tay, chúng ta có thể sử dụng: ví dụ đối với # C94557, nó sẽ là: [UIColor colorWithRed: (CGFloat) 0xC9 / 0xFF green: (CGFloat) 0x45 / 0xFF blue: (CGFloat) 0x57 / 0xFF alpha: 1.0];
ghi nhớ

Có hai phương thức mới trong UIColor chấp nhận các giá trị nguyên từ 0 đến 255. Hãy xem câu trả lời của tôi bên dưới.
Blip

59

Bởi vì phương pháp UIColor của bạn yêu cầu float từ 0-1, không phải 0-255. Bạn cần chia tất cả các giá trị RGB của mình cho 255.0, như sau:

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

3

Bạn phải chia các giá trị của mình cho 255, vì phạm vi là 0-1. Lấy 127/255 = 0,49f và nhập vào đó thay thế. Nó ở đó, nó chỉ là màu trắng :)

chỉnh sửa: nguyên nhân của nhận xét, tôi đã thêm một số mã để làm thế nào tôi giải quyết nó:

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

1

Có hai phương thức mới UIColorchấp nhận các giá trị số nguyên từ 0 đến 255:

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

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

Nó không có trong tài liệu nhưng tôi đã sử dụng nó và nó hoạt động như một sự quyến rũ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.