2009-12-27 16 views
6

Tôi đang cố gắng để có được một NSString chia thành các dòng để phù hợp với chiều rộng mong muốn (vì nó sẽ xảy ra bên trong sizeWithFont:constrainedToSize:). Có cách nào tốt hơn để thực hiện điều này hơn là đoán xem các vi phạm sẽ xảy ra ở đâu trong số sizeWithFont?Breaking NSString thành các dòng (để vừa với chiều rộng mong muốn)

+0

Bạn có thể đi sâu hơn một chút chi tiết về lý do bạn cần các dòng tách biệt không? Nếu bạn chỉ muốn vẽ chuỗi trong một không gian nhất định thì điều này khá đơn giản. –

+0

Tôi đang tạo nền - giống như hình nền bạn nhận được khi chọn văn bản - cho nhãn. Chiều rộng của nó thay đổi cho mỗi dòng (với chiều dài khác nhau), vì vậy tôi sẽ cần chúng một cách riêng biệt. – Pyetras

Trả lời

2

Nếu NSLayoutManager thực sự không khả dụng, bạn có thể bị kẹt với giải pháp không hiệu quả hơn: bắt đầu bằng từ đầu tiên của chuỗi, thêm mỗi từ tiếp theo và sử dụng phương thức sizeWithFont: (v.v.) trên chuỗi kết quả. Khi chiều cao của các thay đổi được trả về CGSize, từ được nối thêm gần đây nhất là từ gây ra ngắt dòng và do đó bạn có thể tách chuỗi đó ở đó.

+0

Đó là những gì tôi đã kết thúc lên với – Pyetras

1

Cập nhật: Điều này dường như chỉ áp dụng trên nền tảng Mac. Mặc dù NSLayoutManager được tham chiếu cụ thể trong Hướng dẫn vẽ chuỗi của iPhone (kể từ tháng 12 năm 2009), không phải NSAttributedString cũng không có sẵn trên nền tảng iPhone. Xin lỗi vì tiếng ồn.

gốc đáp ứng

NSLayoutManager là bạn của bạn nếu bạn đang tìm kiếm để chia chuỗi mình thành dòng một chiều rộng nhất định, với một tập hợp các thuộc tính (ví dụ, bạn cần phải biết những nơi thực tế nơi chuỗi được bao bọc).

Nếu bạn chỉ tìm cách để quấn dây chuyền khi vẽ và bạn không quan tâm đâu, NSAttributedString của (AppKit bổ sung) các phương pháp -drawInRect: hoặc -drawWithRect:options: sẽ làm tốt.

+1

NSLayoutManager hoặc NSAttributedString không có sẵn trên iPhone. –

+1

Tôi sẽ không vẽ các dòng (ngay lập tức), do đó, không NSAttributedString cũng không bổ sung NSString + UIKit sẽ giúp đỡ. – Pyetras

+0

Ole: Khó hiểu. NSLayoutManager được tham chiếu cụ thể trong Hướng dẫn lập trình chuỗi trong thư viện của Trung tâm iPhone Dev: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Strings/Articles/DrawingStrings.html –

1

Cập nhật: Dựa vào nhận xét bên dưới (bạn có thể vẽ chuỗi, nhưng không thể vẽ nền để che chuỗi), tôi nghĩ đặt cược tốt nhất của bạn là sử dụng UIWebView và sử dụng CSS để vẽ lý lịch.


Các NSString UIKit Additions thể phù hợp với nhu cầu của bạn, đặc biệt là

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font 
     lineBreakMode:(UILineBreakMode)lineBreakMode; 

và/hoặc

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font 
     lineBreakMode:(UILineBreakMode)lineBreakMode 
      alignment:(UITextAlignment)alignment; 
+0

Kiểm tra các ý kiến ​​về câu hỏi và câu trả lời của Joshua bên dưới — vẽ các dòng không phải là vấn đề. Anh ta thực sự không cần biết điểm ngắt dòng là gì, với mục đích vẽ một nền chỉ kéo dài đến cuối mỗi dòng. –

1

NSLayoutManager có sẵn từ iOS 7. Tài liệu là here.

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