iOS - 结合NSLineBreakByWordWrapping和NSLineBreakByTruncatingTail

时间:2014-03-14 04:47:47

标签: ios objective-c ios7

我需要什么

我需要在PDF上写一些文字。文本本身可以是任意长度,但我只能显示2行(通过自动换行),如果空间不够,则应截断第二行的尾部。

我尝试了什么

NSMutableParagraphStyle *text = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
text.lineBreakMode = NSLineBreakByTruncatingTail;

这样,文本仅在第一行中出现,并在行的末尾截断。

NSMutableParagraphStyle *text = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
text.lineBreakMode = NSLineBreakByWordWrapping;

这样,文本换行到第二行,但是如果有足够的文本用于更多行,则在第二行的末尾没有截断。

我需要一些方法来结合这两种行为。

我研究的内容

我发现了一些关于自动换行问题的问题,但不是这样的。 我最近得到的是:

NSLineBreakByWordWrapping on First Line but NSLineBreakByTruncatingTail For Second Line?

但那里的问题有所不同。在那个问题中,提问者想要这个行为,但是在标签中,他用一些故事板配置解决了问题,我也在项目的其他部分使用了这个配置。但是这个问题是关于PDF中的这种行为,使用NSStringDrawingContext drawInRect方法。

我正在使用iOS 7(实际上刚刚更新到7.1,但两者的情况相同)。

提前致谢。

编辑 - 同样,我在询问之前看过这个链接,但没有帮助:

https://developer.apple.com/library/ios/documentation/cocoa/reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSLineBreakByWordWrapping

2 个答案:

答案 0 :(得分:3)

参考:

@interface NSAttributedString (NSExtendedStringDrawing)
- (void)drawWithRect:(CGRect)rect options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0);
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0);
@end

Pass" NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine"对于选项,请注意此方法仅适用于NSAttributedString。

答案 1 :(得分:1)

Swift 4中的答案

let str = NSMutableAttributedString(string: "long string")
str.draw(with: label.frame, options: [NSStringDrawingOptions.usesLineFragmentOrigin, .truncatesLastVisibleLine], context: nil)         
label.numberOfLines = 0
label.attributedText = str.copy() as? NSAttributedString