如何在不截断文本的情况下计算UILabel可以包含的NSString最大长度?

时间:2012-04-01 15:12:11

标签: iphone ios xcode nsstring uilabel

我有两个UILabel,一个在另一个之上。 顶部有一个固定的尺寸(2行),底部可以扩展(0行)。 我用于标签的文本可能很短,有时可能很长。 如何在不中间切换单词的情况下计算第一个UILabel最大字符串长度?

//这是创建2个标签的代码。

    titleView = [[UILabel alloc] initWithFrame:CGRectMake(70, 0, 200, 50)]; 
    titleView.numberOfLines = 2;

    titleView2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 250, 100)];
    titleView2.numberOfLines = 0;

2 个答案:

答案 0 :(得分:3)

我用这种方法解决了这个问题:

+ (int)getSplitIndexWithString:(NSString *)str frame:(CGRect)frame andFont:(UIFont *)font
{
    int length = 1;
    int lastSpace = 1;
    NSString *cutText = [str substringToIndex:length];
    CGSize textSize = [cutText sizeWithFont:font constrainedToSize:CGSizeMake(frame.size.width, frame.size.height + 500)];
      while (textSize.height <= frame.size.height)
      {
          NSRange range = NSMakeRange (length, 1);
          if ([[str substringWithRange:range] isEqualToString:@" "])
          {
              lastSpace = length;
          }
          length++;
          cutText = [str substringToIndex:length];
          textSize = [cutText sizeWithFont:font constrainedToSize:CGSizeMake(frame.size.width, frame.size.height + 500)];
      }
      return lastSpace;
}

答案 1 :(得分:0)

CGSize textSize=[someString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:sizeConstraint];

然后你可以访问宽度和高度:

float height=textSize.height;
float width=textSize.width;