【问题标题】:IOS equivalent to Android's Paint.breakText()IOS相当于Android的Paint.breakText()
【发布时间】:2011-03-25 16:05:46
【问题描述】:

我正在寻找相当于 Android 的 Paint.breakText() 的 iOS 目标 c。

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

编辑:

正如 James Bedford 的回答所暗示的,这个问题可以通过添加 UIKit NSString 来解决。

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

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

【问题讨论】:

  • 对于 NSString?还是 UITextView?还是 UITextField?需要多一点。您要确保不超过一定宽度?

标签: iphone android objective-c ios


【解决方案1】:

我知道这不是您要求的,但最简单的方法是使用 UILabel,将其设置为 multiLine,然后它会为您截断和椭圆化。

说到这里,你可以使用 CoreText 来做你想做的事了。 CTFrameSetter 和 TypeSetters 可以提供换行信息,带有索引。

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

【讨论】:

  • 关于 UILabel 的观点非常好。如果您可以使用它,这可能是最好的方法。
【解决方案2】:

您是否尝试过在NSString UIKit Additions category, referenced here 中使用sizeWithFont: 方法?

编辑:

我能想到的最好的办法是编写一个算法,使用这些sizeWithFont: 方法尝试您想要的字符串的每个长度,直到字符串无法再放入框中。此时,您知道您需要返回三个字符以便为省略号留出空间。您应该能够将此算法优化到 O(log(n))。

【讨论】:

  • 我一直在使用 UIKit 附加功能,但我不知道如何使用这些方法中的任何一种方法将省略号添加到剪切或截断的字符串中。
  • 要添加省略号,只需使用:[NSString stringWithFormat:@"%@...", myTruncatedString];
  • 添加省略号很简单,但查找 myTruncatedString 似乎不那么重要。
猜你喜欢
  • 2015-06-06
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多