2014-09-19 23 views
14

Có vẻ trên iOS 8.0 (12A365) NSMutableAttributedString đôi khi sẽ không được hiển thị chính xác. Vấn đề rõ ràng xảy ra khi phạm vi của thuộc tính không bắt đầu ở đầu văn bản (và nếu không có thuộc tính nào khác bắt đầu ở đầu văn bản). !Hiển thị NSMutableAttributedString trên iOS 8

Vì vậy, với 1.) từ thứ hai "xanh" trong sẽ không hiển thị nền màu xanh lá cây (bug) ("tế bào" là một UITableViewCell với UILabel "label" như là một subview):

1.)

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Bug)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){9,5}]; 
cell.label.attributedText=text 

với 2.) và 3) các hình nền được hiển thị một cách chính xác:

2.)

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Ok)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){0,5}]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){9,5}]; 
cell.label.attributedText=text 

3.)

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Ok)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){0,5}]; 
cell.label.attributedText=text 

Find ảnh chụp màn hình và XCode 6 dự án ở đây: Screenshot and XCode 6 Project

Có vẻ đối với tôi như là một lỗi trong iOS 8 - do đó, một báo cáo đi vào Apple.

+0

tôi đã b een nhìn thấy điều này cũng như cố gắng nhấn mạnh một phần của một nhãn. Đây là một hồi quy thực sự khó chịu. –

+1

@ Darcy: Cảm ơn bạn đã bình luận. Bạn có thể thử thêm một thuộc tính giả khác (như nền màu rõ ràng ...) tại (NSRange) {0,1} - đối với tôi đây là giải pháp cho 1.) như đã đề cập ở trên. –

+0

Bạn đã gửi báo cáo lỗi cho Apple chưa? Tôi đang chạy chính xác cùng một vấn đề ở đây. – MrBr

Trả lời

0

Tôi đang chạy vào các vấn đề tương tự với NSAttributedString và thuộc tính NSLinkAttributeName trong iOS 8. Cụ thể, một bắt đầu ở đầu chuỗi (ví dụ: "www.cnn.com") hiển thị như mong đợi (sử dụng drawWithRect: tùy chọn :bối cảnh:). Tuy nhiên, nếu chúng tôi thêm liên kết vượt quá ký tự đầu tiên (ví dụ: "văn bản www.cnn.com") thì liên kết không hiển thị màu xanh lam hoặc gạch chân, mặc dù các thuộc tính là chính xác. Những chuỗi này thường có các thuộc tính bao gồm toàn bộ chuỗi và điều đó dường như không quan trọng, có lẽ vì các thuộc tính "toàn bộ chuỗi" được thêm sau các thuộc tính của NSLink. Tôi đã cố gắng trao đổi thứ tự để các liên kết được thêm vào sau khi các thuộc tính khác, nhưng điều đó không khắc phục được vấn đề.

Cách giải quyết duy nhất mà tôi đã tìm ra cho đến nay là để lại thuộc tính liên kết với một gạch dưới, sau khi thêm thuộc tính áp dụng cho toàn bộ chuỗi, như thế này:

 [_attributedDisplayValue enumerateAttribute:NSLinkAttributeName 
              inRange:displayValueRange 
              options:0 
             usingBlock:^(id value, NSRange range, BOOL *stop) { 
              [_attributedDisplayValue addAttribute:NSUnderlineColorAttributeName 
                      value:[UIColor blueColor] 
                      range:range]; 
             }]; 
+0

Cảm ơn bạn đã trả lời! Cách giải quyết của bạn dường như giống với tôi hoặc giống như được mô tả trong bình luận của tôi với Darcy. Tin xấu bằng cách này, trong iOS 8.0.2 vấn đề vẫn còn đó ... –

9

Hãy thử điều này, đầu tiên áp dụng thêm một NSBackgroundColorAttributeName trong toàn bộ nhãn với một màu trong suốt

text = [[NSMutableAttributedString alloc] initWithString:@"Green is green. (-> Bug)"]; 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor clearColor] range:(NSRange){0,text.length}]; //Fix 
[text addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:(NSRange){9,5}]; 
cell.label.attributedText=text 
+2

Đây là bản sửa lỗi và ít nhất phải được coi là câu trả lời chính xác – MrBr

+1

Đã xảy ra sự cố tương tự trong iOS8 khi văn bản gạch ngang không hiển thị ở giữa các dãy. Điều này cố định nó - 10x. lỗi nên được báo cáo cho táo. – AmitP

Các vấn đề liên quan