我正在尝试将NSString分成几行以适合所需的宽度(因为它会发生在sizeWithFont:constrainedToSize:
内)。有没有更好的方法来做到这一点,而不是猜测sizeWithFont
中发生中断的位置?
答案 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)
NSLayoutManager 可用。文档为here。