我需要在iPhone应用程序的UILabel中居中一个单词。我有一串文字太长而无法放入标签中,因此我想将标签置于特定单词的中心并截断两端。例如:这是一个例句。 “大家好,我被困在试图用UILabel中的一个长句中的一个词。”我想以“卡住”这个词为中心,以便UILabel看起来像这样,“......我卡住试图......”。我找到了一个问题的链接,这个问题有同样的问题,但我无法得到适合我的答案。我对这种编程很新,所以任何进一步的帮助都会非常感激!提前致谢。以下是其他问题的链接:iOS: Algorithm to center a word in a sentence inside of a UILabel
答案 0 :(得分:3)
我刚刚编码并运行了这个(但没有测试任何边缘情况)。我们的想法是围绕单词创建一个NSRange,然后在每个方向上对称地增大该范围,同时测试截断字符串的像素宽度与标签的宽度。
- (void)centerTextInLabel:(UILabel *)label aroundWord:(NSString *)word inString:(NSString *)string {
// do nothing if the word isn't in the string
//
NSRange truncatedRange = [string rangeOfString:word];
if (truncatedRange.location == NSNotFound) {
return;
}
NSString *truncatedString = [string substringWithRange:truncatedRange];
// grow the size of the truncated range symmetrically around the word
// stop when the truncated string length (plus ellipses ... on either end) is wider than the label
// or stop when we run off either edge of the string
//
CGSize size = [truncatedString sizeWithFont:label.font];
CGSize ellipsesSize = [@"......" sizeWithFont:label.font]; // three dots on each side
CGFloat maxWidth = label.bounds.size.width - ellipsesSize.width;
while (truncatedRange.location != 0 &&
truncatedRange.location + truncatedRange.length + 1 < string.length &&
size.width < maxWidth) {
truncatedRange.location -= 1;
truncatedRange.length += 2; // move the length by 2 because we backed up the loc
truncatedString = [string substringWithRange:truncatedRange];
size = [truncatedString sizeWithFont:label.font];
}
NSString *ellipticalString = [NSString stringWithFormat:@"...%@...", truncatedString];
label.textAlignment = UITextAlignmentCenter; // this can go someplace else
label.text = ellipticalString;
}
并称之为:
[self centerTextInLabel:self.label aroundWord:@"good" inString:@"Now is the time for all good men to come to the aid of their country"];
如果您认为它是守门员,您可以将其更改为UILabel上的类别方法。
答案 1 :(得分:0)
建议:使用两个标签,一个左对齐,一个右对齐。两者都应在“外部”(可见)标签边框的外侧截断,并排放置。将您的中心词构成两者之间的过渡分配您的句子。
通过这种方式,您将无法获得完美的居中(它将随着您的中心词的长度而变化)但它将接近它。