2013-04-12 35 views
10

Tôi hiện đang sử dụngCách nhận kích thước NSString khi NSString bao gồm biểu tượng cảm xúc?

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode 

để có được kích thước của một NSString. Tuy nhiên, khi chuỗi đó bao gồm biểu tượng cảm xúc, có vẻ như để tính kích thước cho ký tự unicode bằng chữ thay vì tính đến kích thước của biểu tượng cảm xúc, hiển thị kích thước trả về không chính xác.

Làm thế nào để tôi có được kích thước chính xác của chuỗi với các ký tự biểu tượng cảm xúc, vì nó sẽ xuất hiện trong một nhãn?

+2

Có lẽ bạn có thể đưa ra ví dụ cụ thể (ngắn) về một chuỗi, kích thước được tính toán và kích thước mong muốn. –

+1

Tôi vừa thử với một kết hợp các biểu tượng cảm xúc khác nhau và các ký tự La Mã, các phông chữ khác nhau, và kích thước luôn đúng ... Có lẽ vấn đề là với tham số 'constrainedToSize:', quá nhỏ để chứa chuỗi .. – Guillaume

+1

Theo mặc định, tất cả các biểu tượng cảm xúc được trình bày ở kích thước cố định, bất kể kích thước phông chữ và cả NSString và UIFont sẽ bỏ qua kích thước phông chữ hoàn toàn. Tôi tin rằng các ký tự biểu tượng cảm xúc luôn được vẽ ở khoảng 20px (không phải võng mạc) trên iOS, vì vậy chúng sẽ không đo chính xác với phần còn lại của chuỗi. –

Trả lời

2

NSString không hiển thị biểu tượng cảm xúc, nó đại diện cho một chuỗi, vì vậy sizeWithFont sẽ chỉ tính đến chuỗi.

Tôi sẽ sử dụng:

CGRect labelFrame = label.frame; 
labelFrame.size = [label sizeThatFits:CGSizeMake(100, 9999)]; 
[label setFrame:labelFrame]; 

hoặc

//Alternatively 
[label sizeToFit]; 

Bare nhớ rằng sizeToFit gọi phương thức sizeThatFits:, vì vậy về mặt chỉ thiết lập các nhãn với chiều cao đúng, sizeThatFits: là nhanh hơn , và dễ dàng hơn nhiều trên mắt.

+1

Tôi xin lỗi vì đã thất vọng, nhưng bạn sẽ thấy rằng điều này sẽ không giải quyết được vấn đề, như đã lưu ý trong ngăn xếp của tôi ở đây: http: // stackoverflow. com/questions/19537354/emojis-messing-with-obj-cs-sizewithfont-math –

1

Tôi đã vật lộn với điều tương tự này trong một thời gian, cố gắng nhiều giải pháp bao gồm câu trả lời được chấp nhận, câu trả lời đó không có tác dụng đối với tôi. Tôi đã giải quyết điều này bằng cách tạo một chuỗi NSAttributed với văn bản, sau đó sử dụng phương thức NSAttributedString boundingRectWithSize: options: context: để lấy kích thước của chuỗi.

NSString *text = //some text 
CGFloat maxSize = //text size constraints 

NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text 
                     attributes:@{NSFontAttributeName : font 
                        }]; 

CGRect boundingRect = [attributedString boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; 
CGSize fitSize = boundingRect.size; 
Các vấn đề liên quan