1

我需要在 iphone 应用程序的 UILabel 中将一个单词居中。我有一串文本太长而无法放入标签中,因此我想让标签以特定单词为中心并截断末端。例如:这是一个例句。“大家好,我一直在试图将 UILabel 中长句中的一个词居中。” 我想集中在“卡住”这个词上,以便 UILabel 看起来像这样,“......我被困住了...... 。我找到了一个指向具有相同问题的问题的链接,但我无法得到适合我的答案。我对这种编程非常陌生,因此非常感谢您提供任何进一步的帮助!提前致谢。这是另一个问题的链接:iOS:在 UILabel 内的句子中居中单词的算法

4

2 回答 2

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 上的一个分类方法。

于 2012-04-26T04:25:48.870 回答
0

建议:使用两个标签,一个左对齐,一个右对齐。两者都应在“外部”(可见)标签边框的外侧截断,并并排放置。分配你的句子,你的中心词构成两者之间的过渡。

这样,你不会得到一个完美的居中(它会随着你的中心词的长度而变化),但它会接近它。

于 2012-04-26T03:56:15.807 回答