【发布时间】:2015-07-08 13:16:51
【问题描述】:
我正在尝试设置背景颜色/仅突出显示 UILabel 中的文本。问题是添加到UILabel 以保持文本居中的换行符和空格也被突出显示。
注意UILabel 中最后一行之前的间距被突出显示。此外,任何新行的开头和结尾也会突出显示。
我正在使用以下代码创建上面的示例:
-(void)createSomeLabel {
// Create and position my label
UILabel *someLabel = [[UILabel alloc] initWithFrame:CGRectMake(0,
0,
self.view.frame.size.width - 40,
self.view.frame.size.height - 300)];
someLabel.center = CGPointMake(self.view.frame.size.width / 2, self.view.frame.size.height / 2);
someLabel.textAlignment = NSTextAlignmentCenter;
someLabel.textColor = [UIColor whiteColor];
someLabel.lineBreakMode = NSLineBreakByWordWrapping;
someLabel.numberOfLines = 0;
[self.view addSubview:someLabel];
// This string will be different lengths all the time
NSString *someLongString = @"Here is a really long amount of text that is going to wordwrap/line break and I don't want to highlight the spacing. I want to just highlight the words and a single space before/after the word";
// Create attributed string
NSMutableAttributedString *someLongStringAttr=[[NSMutableAttributedString alloc] initWithString:someLongString attributes:nil];
// Apply background color
[someLongStringAttr addAttribute:NSBackgroundColorAttributeName
value:[UIColor colorWithWhite:0 alpha:0.25]
range:NSMakeRange(0, someLongStringAttr.length)];
// Set text of label
someLabel.attributedText = someLongStringAttr;
}
我想要实现的输出是仅突出显示文本和单词之间的空格(如果只有一个空格)。文本的长度和UILabel 的大小会不断变化,所以很遗憾,硬编码解决方案不是一种选择。
【问题讨论】:
-
@PavanJangid 我看不出这些示例与我提供的示例有何不同。你能详细说明一下吗?
-
@DanielStorm 您是否尝试为每个单词的范围而不是整个字符串设置背景颜色?
-
@Kreiri 我想到了这一点,但无法想出一种方法来从字符串中提取每个单词,两边都有空格,应用属性,然后重建字符串。我想当自动换行时,填充每个单词的空格会被拉伸,导致同样的问题?
-
建议使用 CoreText。一个好的开始:github.com/dineshrajas/HighlightLabel 似乎既然它计算了“真实的字母渲染”,它应该做你想做的事。不久前我在这个项目上玩了一点,如果我没记错的话,还有一些不完善的地方,还有一些改变要做。
标签: ios objective-c uilabel nsmutableattributedstring