iOS中与Android的Paint.breakText()相当的方法是什么?

3

我正在寻找iOS Objective-C版本的Android Paint.breakText()等效功能。

我有一个要放入矩形中的字符串。如果它不适合,我需要找到要替换为省略号并删除其余字符串的字符的索引。

编辑:

正如James Bedford的答案所暗示的那样,这个问题可以通过UIKit NSString附加功能来解决。

[foo drawInRect:someRect withFont:someFont
     lineBreakMode:UILineBreakModeTailTruncation];

UILineBreakModeTailTruncation与绘图结合使用时,会在字符串末尾添加省略号。


对于NSString?或UITextView?或UITextField?需要更多的信息。您想确保什么不超过一定的宽度? - Jesse Naugher
2个回答

4

我知道这不是你要求的,但最简单的方法是使用UILabel,将其设置为multiLine,然后它会自动截断并省略。

现在说到这点,你可以使用CoreText来实现你想要的效果。CTFrameSetter和TypeSetters可以提供带索引的分行信息。

我可以提供一个示例,但我还没有使用过这些类。


2
UILabel非常好用。如果可以使用它,这可能是最好的选择。 - James Bedford

3
你尝试使用过在此处引用的NSString UIKit Additions类别中的sizeWithFont:方法吗?
编辑:
我能提供的最佳解决方案是编写一个算法,使用这些sizeWithFont:方法尝试每个所需字符串长度,直到字符串无法适应框中。此时,您知道需要向后退三个字符以留出省略号的空间。您应该能够将此算法优化为O(log(n))。

我一直在使用UIKit的扩展,但我不知道如何使用其中任何方法来将省略号添加到被剪切或截断的字符串中。 - Axle
只需使用以下代码即可添加省略号:[NSString stringWithFormat:@"%@...", myTruncatedString]; - Jeffrey Berthiaume
添加省略号很简单,但是找到被截断的字符串似乎不那么容易。 - James Bedford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接