精简版
从文档:
NSLineBreakByWordWrapping
换行发生在单词边界,除非单词本身不适合单行。
所有单词边界字符的集合是什么?
更长的版本
我有一组 UILabel,其中包含文本,有时还包括 URL。我需要知道 URL 的确切位置(frame
, not range
),以便使它们可点击。我的数学主要是有效的,但我必须对某些字符进行测试:
// This code only reached if the URL is longer than the available width
NSString *theText = // A string containing an HTTP/HTTPS URL
NSCharacterSet *breakChars = [NSCharacterSet characterSetWithCharactersInString:@"?-"];
NSString *charsInRemaininsSpace = // NSString with remaining text on this line
NSUInteger breakIndex = NSNotFound;
if (charsInRemaininsSpace)
breakIndex = [charsInRemaininsSpace rangeOfCharacterFromSet:breakChars
options:NSBackwardsSearch].location;
if (breakIndex != NSNotFound && breakIndex != theText.length-1) {
// There is a breakable char in the middle, so draw a URL through that, then break
// ...
} else {
// There is no breakable char (or it's at the end), so start this word on a new line
// ...
}
我的 NSCharacterSet 中的字符只是?和 -,我发现 NSLineBreakByWordWrapping 中断了。它不会中断我在 % 和 = 等 URL 中看到的其他字符。是否有我应该打破的角色的完整列表?