我有UIView
包含两个UILabels
,以显示字符串。
第一个UILabel
具有固定的大小,如果字符串太长且无法保留在此UILabel
中,我想在第一个UILabel
中显示我可以使用的最大字符数,并在第二个UILabel
中显示其余字符串。
但要做到这一点,我必须知道第一个UILabel
中显示的字符串的确切部分,由于字符串和换行符的随机性,这并不容易。
那么,有没有办法只获取第一个UILabel
中显示的文本,而没有字符串的截断部分?
答案 0 :(得分:1)
if ([_infoMedia.description length] > 270) {
NSRange labelLimit = [_infoMedia.description rangeOfString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange(270, (_infoMedia.description.length - 270))];
_descTop.text = [_infoMedia.description substringToIndex:labelLimit.location];
_descBottom.text = [_infoMedia.description substringFromIndex:(labelLimit.location+1)];
} else {
_descTop.text = _infoMedia.description;
_descBottom.text = @"";
}
好的,这是一个迟到的答案,但也许它可以帮助某人。上面的代码大概是我在我的应用程序中使用的解决方案。
_descTop是我的第一个标签,_descBottom是第二个标签。 270是一个常数,相当于我第一个标签_descTop中显示的平均最大字符数。我手工计算,尝试使用许多不同的字符串,也许有更好的方法可以做到这一点,但这也不错。
如果我要显示的字符串(_infoMedia.description)大于270个字符,我将前270个字符加上字符串中下一个字的结尾(通过搜索下一个空格),如果270个字符的限制会在一个单词的中间剪切字符串。然后我将字符串的第一部分放在我的第一个标签中,第二部分放在第二个标签中。
如果没有,我只将字符串的全局性放在第一个标签中。
我知道这是一个糟糕的解决方案,但它有效,我没有找到更好的方法来做到这一点。
答案 1 :(得分:0)
以下代码可能会帮助您获得所需内容!!
//If you want the string displayed in any given rect, use the following code..
@implementation NSString (displayedString)
//font- font of the text to be displayed
//size - Size in which we are displaying the text
-(NSString *) displayedString:(CGSize)size font:(UIFont *)font
{
NSString *written = @"";
int i = 0;
int currentWidth = 0;
NSString *nextSetOfString = @"";
while (1)
{
NSRange range;
range.location = i;
range.length = 1;
NSString *nextChar = [self substringWithRange:range];
nextSetOfString = [nextSetOfString stringByAppendingString:nextChar];
CGSize requiredSize = [nextSetOfString sizeWithFont:font constrainedToSize:CGSizeMake(NSIntegerMax, NSIntegerMax)];
currentWidth = requiredSize.width;
if(size.width >= currentWidth && size.height >= requiredSize.height)
{
written = [written stringByAppendingString:nextChar];
}
else
{
break;
}
i++;
}
return written;
}
@end