2009-09-16 6 views
16

Tôi cần đo chiều rộng pixel của một chuỗi trong Cocoa Touch. Bất cứ ai có thể chỉ cho tôi một liên kết giải thích làm thế nào để làm điều này?Đo chiều rộng pixel của một chuỗi

+5

Bạn không nên yêu cầu câu trả lời khách quan chung khi câu hỏi này thực sự về các tính năng trong Cocoa cho Mac OS X hoặc Cocoa Touch cho iPhone OS. Objective-C chỉ là ngôn ngữ lập trình mà cả Cocoa và Cocoa Touch đều sử dụng. – PeyloW

+4

Có sử dụng mục tiêu-c nào khác ngoài lập trình cho Mac OS hoặc IOS không? Nếu vậy, nó có ý nghĩa không? –

Trả lời

27

Trên hệ điều hành iPhone, hơi khác một chút, thay vào đó hãy xem NSString UIKit Additions Reference. Ý tưởng cũng giống như trong Cocoa cho Mac OS X, nhưng có nhiều phương pháp hơn.

Đối với dòng duy nhất sử dụng văn bản:

- (CGSize)sizeWithFont:(UIFont *)font 
       forWidth:(CGFloat)width 
     lineBreakMode:(UILineBreakMode)lineBreakMode 

Và đối với các văn bản multiline sử dụng:

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

Việc sử dụng một UILineBreakMode như là đối số cho dòng duy nhất của văn bản có thể gây nhầm lẫn, nhưng đây là vì ngắt dòng cũng được sử dụng để xác định cách cắt ngắn văn bản.

+0

Điều này dường như làm việc tốt cho phông chữ thông thường nhưng nó dường như không đưa ra giới hạn chính xác cho phông chữ như Zapfino. Mã mẫu có tại http://paste.lisp.org/display/130803 và ảnh chụp màn hình đầu ra là http://ScrnSht.com/juixwk. Bất kỳ ý tưởng tại sao và làm thế nào để giải quyết nó? – trss

+0

không được chấp nhận trong iOS7 .. tài liệu không đề cập đến bất kỳ sự thay thế nào .. có bất kỳ sự thay thế nào không? – abbood

+0

Tài liệu iOS7 hiện tại (Xcode 5.0.1) tham chiếu đến các bản thay thế (có xu hướng chỉ dành cho iOS7). – JLundell

5

Hãy xem NSString Application Kit Additions Reference, cụ thể là boundingRectWithSize:options:attributes:. Giá trị được trả về bởi thường trình đó sẽ cho bạn chiều rộng của NSString.

+8

Tài liệu không rõ ràng về cách sử dụng 'boundingRectWithSize: options: attributes:'. Nó sẽ là tốt đẹp nếu bạn có thể thêm một ví dụ về cách thực sự sử dụng phương pháp này để đo một chuỗi với một phông chữ cụ thể. – PeyloW

0

Giải pháp trên hiện không được chấp nhận. Kiểm tra điều này cho iOS 7+

sizeWithFont:constrainedToSize:lineBreakMode 

không còn được dùng nữa. Sử dụng đoạn mã bên dưới,