计算足够的文本以适应现有的UILabel

时间:2011-09-06 10:57:32

标签: iphone objective-c ios cocoa-touch

我无法获得一些为我工作的CoreText文本包装代码;它太复杂了。我将尝试去另一条路线,即将我的UILabel分成两部分。

我想要实现的是让我的文字看起来环绕我固定尺寸的矩形图像。它总是具有相同的尺寸。

因此,当图像旁边的UILabel完全填满时,它会在图像下方创建另一个UILabel。

现在,我如何计算第一个UILabel中的文本,并使其在UILabel的整个宽度上很好地适应,而不是太短或最后切断?

2 个答案:

答案 0 :(得分:1)

嗯,这应该可以使主字符串的子字符串适合所需的宽度:

//masterString is your long string that you're looking to break apart...
NSString *tempstring = masterString;

while (someLabel.bounds.size.width < [tempString sizeWithFont:someLabelLabel.font].width) {
    NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[tempString componentsSeparatedByString:@" "]];
    //Remove the last object, which is the last word in the string...
    [tempArray removeLastObject];

    //Recreate the tempString with the last word removed by piecing the objects/words back together...
    tempString = @"";
    for (int i=0; i < tempArray.count - 1; i++) {
        tempString = [tempString stringByAppendingFormat:@"%@ ", [tempArray objectAtIndex:i]];
    }
   //You must append the last object in tempArray without the space, or you will get an infinite loop...
    tempString = [tempString stringByAppendingFormat:@"%@", [tempArray objectAtIndex:tempArray.count - 1]];
}
//Now do whatever you want with the tempString, which will fit in the width desired...

当然,这是假设您希望使用自动换行进行分离。如果你不介意将文字本身分开(即字符包装)以便完全占据所需的宽度,那就改为:

NSString *tempstring = masterString;

while (someLabel.bounds.size.width < [tempString sizeWithFont:someLabelLabel.font].width) {
    tempString = [tempString substringToIndex:tempString.length - 1];
}
//Now do whatever you want with the tempString, which will fit in the width desired...

为了让剩余的字符串留下来,请执行以下操作:

NSString *restOfString = [masterString substringFromIndex:tempString.length];

希望这会有所帮助。我不得不承认我还没有正确测试这段代码,虽然我过去做过类似的事情......

答案 1 :(得分:0)

尝试以下链接,它会帮助你。

如果您想在标签中的某些自定义文字上创建“链接”,而不是使用@Fabian Kreiser建议的WebView,您可以使用我的OHAttributedLabel类(you can find it this link)

请参阅我的github存储库中提供的示例代码:您可以使用我的addCustomLink:inRange:方法将链接(带有自定义URL)添加到一系列文本中(您可以通过迭代每次出现的文本来确定该范围)你的文字中的“iPhone”这个词很容易)。然后在OHAttributedLabel上的委托方法中,您可以捕获链接被点击并相应地采取行动以执行您需要的任何操作。