gpt4 book ai didi

ios - 防止在 NSAttributedString 中换行

转载 作者:可可西里 更新时间:2023-11-01 17:04:57 37 4
gpt4 key购买 nike

我认为当您有一组不想要换行的单词时,这是一个常见问题。

有时这些词之间的字符是空格或连字符等。在我的例子中是一个点:)

这是我的文本 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"];
}
}

我找到了其他解决方案,例如用空格或连字符替换牢不可破的字符:

Preventing line breaks in part of an NSAttributedString

但我的问题更笼统,NSAttributedString 是否提供了一些东西来将一组单词定义为不可破坏的?或者有没有更简单的方法来处理一组通用的单词?

最佳答案

不,NSAttributedString 没有任何防止在一个范围内换行的每个字符的属性。您可以在 NSParagraphStyle 中将 NSLineBreakMode 设置为 ByClipping 或其他非环绕模式,但这适用于段落中的所有文本。 (段落以换行符分隔。)

为了防止在比整个段落更小的范围内换行,需要插入一个U+2060 WORD JOINER在可能发生不需要的中断的任何两个字符之间。在您的示例中,这意味着在斜杠字符的每一侧。

关于ios - 防止在 NSAttributedString 中换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35489781/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com