2011-10-11 25 views
9

Tôi có một UITableViewCell được nhóm tùy chỉnh, với một vài UILabels trên đó. Vì màu nền UITableViewCell được sử dụng để có màu trắng tinh khiết, nó khớp với màu nền mặc định của UILabels, do đó hộp UILabel không hiển thị được ..Màu bg ô khác nhau tùy thuộc vào phiên bản iOS (4.0 đến 5.0)

Sau khi cập nhật lên iOS 5.0, tôi nhận thấy rằng bây giờ màu nền mặc định cho nhóm UITableViewCells là một màu trắng xám hơn (thực sự # f7f7f7), và kết quả là khung của UILabels có thể nhìn thấy một cách xấu xí ..

Vì vậy, cách tốt nhất để thiết lập màu nền của UILabels khi cần khác nhau giữa các phiên bản iOS khác nhau? Tôi biết tôi có thể sử dụng opaque = NO và [UIColor clearColor], nhưng tôi thích vẽ nền của UILabels vì lý do hiệu suất.

+0

Điều buồn cười là tôi không thể tái tạo này. Tôi đã tạo một UITableView rất đơn giản và các hình nền của ô có cùng màu xám trong iOS 4 và iOS 5 (trên trình mô phỏng). – matt

Trả lời

4

Trong phương thức đại biểu tableView:willDisplayCell:, UITableViewCell sẽ có màu nền được đặt thành màu trắng hoặc, trong iOS 5, xám.

Bạn có thể thay đổi tất cả backgroundColor của tất cả các bản xem phụ của mình.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    for (UIView* view in cell.contentView.subviews) { 
     view.backgroundColor = cell.backgroundColor; 
    } 
} 
1

Bạn có thể gọi:

[[UIDevice currentDevice] systemVersion] 

Mặc dù đó không được khuyến khích cho rất nhiều lý do, và tôi không chắc chắn đó là cách tốt nhất để giải quyết vấn đề của bạn. Về nguyên tắc, bạn sẽ có thể triển khai mã xem và nhận được kết quả nhất quán mà bạn muốn bằng một số phương tiện khác.

Nếu bạn thực sự muốn so sánh các phiên bản thiết bị, bạn sẽ có thể thiết lập một tài sản và kiểm tra hệ điều hành của thiết bị khi tải xem điều khiển, như trái ngược với trong cellForRowAtIndexPath của bạn ...

1

Những gì tôi đã được thành lập màu nền của ô [UIColor whiteColor] trong willdisplaycell ...

Bằng cách đó tôi kiểm soát mọi thứ trông như thế nào.

3

tôi thấy rằng vấn đề trong tùy chỉnh của tôi UITableViewCell trong một TableView nhóm tôi chỉ cần thiết lập màu nền nhãn rõ ràng và cố định nó cho tôi và làm việc tại iOS4 và iOS5. Tôi đặt mã này trong mã ô tùy chỉnh nơi UILabel được tạo như sau:

[nameLabel setBackgroundColor:[UIColor clearColor]]; 

Sau khi sự cố đó biến mất.

4

Không có gì sai với câu trả lời gcamp, nhưng nếu bạn muốn giữ màu trắng nền trên cả iOS4 và iOS5, sau đó chỉ cần làm điều này:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [cell setBackgroundColor:[UIColor whiteColor]]; 
} 
Các vấn đề liên quan