xar*_*rly 3 nsattributedstring ios
我认为当你有一组不想要断线的单词时,这是一个常见的问题.
有时这些单词之间的字符是空格或连字符等.在我的情况下,它是一个点:)
这是我的文字50.0/80.0
最后,我使用尺寸标签并测量了特别需要的字符串空间:
UIFont *fontAwardNumber = [UIFont fontWithName:@"DIN-Bold" size:20];
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGSize labelSize = (CGSize){customCell.awardValueLabel.bounds.size.width, FLT_MAX};
CGRect rectNeededForAwardNumber = [awardNumber boundingRectWithSize:labelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: fontAwardNumber} context:context];
if (rectNeededForAwardNumber.size.height > customCell.awardValueLabel.bounds.size.height) {
//We need to add a breakline
NSRange range = [awardNumber rangeOfString:@"/"];
if (range.location != NSNotFound) {
awardNumber = [awardNumber stringByReplacingCharactersInRange:range withString:@"/\n"];
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了其他解决方案,例如用空格或连字符代替不可破坏的字符:
但我的问题更为笼统,NSAttributedString是否提供了将一组单词定义为不可破解的内容?或者,对于一般词汇,有没有更简单的方法呢?
不,NSAttributedString没有任何每个字符属性可以防止某个范围内的换行.您可以在其中设置NSLineBreakModeto ByClipping或另一种非包装模式NSParagraphStyle,但这适用于段落中的所有文本.(段落用换行符分隔.)
为了防止在比整个段落更小的范围内断行,您需要在任何两个字符之间插入U + 2060 WORD JOINER,否则可能会发生意外中断.在您的示例中,这意味着在斜杠字符的每一侧.
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |