将NSString分成多行(以适合所需的宽度)

时间:2009-12-27 22:36:25

标签: iphone objective-c

我正在尝试将NSString分成几行以适合所需的宽度(因为它会发生在sizeWithFont:constrainedToSize:内)。有没有更好的方法来做到这一点,而不是猜测sizeWithFont中发生中断的位置?

4 个答案:

答案 0 :(得分:2)

如果NSLayoutManager确实不可用,您可能会遇到效率更低的解决方案:从字符串的第一个单词开始,附加每个后续单词并使用sizeWithFont:(等等)方法结果字符串。当返回的CGSize的高度发生变化时,最近附加的单词是导致换行的单词,因此您可以在那里拆分字符串。

答案 1 :(得分:1)

更新:这显然仅适用于Mac平台。虽然在iPhone的字符串绘图指南(截至2009年12月)中特别引用了NSLayoutManager,但iPhone平台上既没有NSAttributedString,也没有NSAttributedString。对不起噪音。

原始回复

NSLayoutManager是你的朋友,如果你想把字符串本身分成一定宽度的行,并带有一组给定的属性(即,你需要知道字符串被包裹的实际位置)。

如果您只是想在绘图时包裹行并且您不在乎哪里,NSAttributedString的(AppKit Additions)方法-drawInRect:-drawWithRect:options:会做得很好

答案 2 :(得分:1)

更新:根据下面的评论(你可以绘制字符串,但无法绘制背景来覆盖字符串),我认为你最好的选择是使用UIWebView并使用CSS绘制你的背景。


NSString UIKit Additions可能符合您的需求,尤其是

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

和/或

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

答案 3 :(得分:1)

自iOS 7起,

NSLayoutManager 可用。文档为here