【问题标题】:How to get a string of a particular height in objective c如何在目标c中获得特定高度的字符串
【发布时间】:2013-11-22 03:51:45
【问题描述】:

嗨,在我的应用程序中,我有一个很长的字符串。从该字符串中,我必须将字符串高度为 500 的字符串的一部分作为子字符串。所以请告诉我如何获取字符串的一部分。

为了您的参考,我分享了我用于获取字符串高度的代码

 CGSize finalStringSize = [finalString sizeWithFont:font constrainedToSize:CGSizeMake(195,length) lineBreakMode:NSLineBreakByWordWrapping];

这里 finalstringSize.height 是 500。现在任何人都可以帮我从最终字符串中获取一个子字符串,其中子字符串的高度为 500。

请帮帮我。

【问题讨论】:

  • 您是否尝试获取适合该字段的子字符串?你能解释一下你真正想要达到的目标吗?
  • 是的,我必须获取子字符串,但在这里我无法确定字符串的确切长度来确定子字符串的范围。
  • 我敢肯定有人知道一个更优雅的解决方案,但您可以每次从字符串中删除一个字符时执行一个循环,直到达到所需的高度......

标签: ios objective-c nsstring


【解决方案1】:

使用此代码设置特定的内容高度:

 NSString *finalString=@"d jdsfhksd fsdfhjkds fkdhsfjkdsf kdsfhjkdsf sdjkfsdfh dsfhsfisudi udsifhisdhf sdhfkh sdkf dshf ksdh fkhsd khsdfh sdkhf sdhkfhsdjkfhdshf sdfhdshf hsdfh ksdhf kdhsf hsdkfhsdkhf sdf hsdkfh dsf sdkhf ksdhf hsdfh sdhfksdhf sd ksdhsdh ksdh dhs hsdh ksdh dhs fhsdfh dsfsdfdf sdf sd sd dsf sd fsdf ds"; 
 int length =200; 
 UIFont *font=[UIFont fontWithName:@"Helvetica" size:17.0f]; 
 NSString *firstPartString=[NSString stringWithString:finalString]; 

 CGSize firstPartStringSize = [firstPartString sizeWithFont:font constrainedToSize:CGSizeMake(195,MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; 

 while(firstPartStringSize.height > length) 
 { 
      firstPartString = [firstPartString substringWithRange:NSMakeRange(0, firstPartString.length-1)]; 
      firstPartStringSize = [firstPartString sizeWithFont:font constrainedToSize:CGSizeMake(195,MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; 
 } 

 if(firstPartStringSize.height <= length) 
 { 
      while(![[firstPartString substringToIndex:[firstPartString length]-1] isEqualToString:@" "]) 
      { 
           NSLog(@"%@",[firstPartString substringFromIndex:[firstPartString length]-1]); 
           if([firstPartString substringFromIndex:[firstPartString length]-1].length !=0 && ![[firstPartString substringFromIndex:[firstPartString length]-1] isEqualToString:@" "]) 
           { 
                firstPartString = [firstPartString substringWithRange:NSMakeRange(0, firstPartString.length-1)]; 
           } 
           else 
           { 
                break; 
           } 

      } 
 } 

 NSString *resultStr=firstPartString; 

 int secondPartStringLength=[finalString length]-firstPartString.length; 
 NSRange secondPartStringRange=NSMakeRange(firstPartString.length, secondPartStringLength); 
 NSString *secondPartString=[finalString substringWithRange:secondPartStringRange];

【讨论】:

  • 我已经在我的应用程序中使用静态字符串测试了上面的代码,它的工作很完美
  • 这是第一个答案的(效率较低)重复。 stringWithFormat: 电话的意义何在?
  • 比什么更有效率?
  • 1) 您的答案与之前的答案重复。 2)您不必要地拨打stringWithFormat:。摆脱那整条线。 3) 每次循环迭代都会创建一个新字体。为什么?
  • 检查两者是否不重复
【解决方案2】:

根据我的评论,你可以试试这个:

CGSize finalStringSize = [finalString sizeWithFont:font constrainedToSize:CGSizeMake(195,length) lineBreakMode:NSLineBreakByWordWrapping];
while( finalStringSize.height > 500 ){
    finalString = [finalString substringWithRange:NSMakeRange(0, finalString.length-1)];
    finalStringSize = [finalString sizeWithFont:font constrainedToSize:CGSizeMake(195,length) lineBreakMode:NSLineBreakByWordWrapping];
}
NSLog(finalString); // and that is your end string...

根据您在下面的评论,您可以使用CTFramesetterSuggestFrameSizeWithConstraints 方法找到您可以在[finalString substringWithRange:range]; 中使用的NSRange 以获得最终结果。

该方法的文档是here

【讨论】:

  • 嗨,Goran,感谢您的回复。但它对我来说行不通。
  • 有什么问题,我没有机会测试这段代码......你能解释一下你得到的结果吗?无限循环?你得到的 finalStringSize 是多少?
  • 嗨 Goran 其实我关心的是我想知道适合特定矩形的字符串长度。这是我的要求,我想知道适合矩形的长度。你能帮忙吗我在这个问题上。
  • 嗨,Goran 实际上知道我面临的问题,请检查这个问题。stackoverflow.com/questions/15321544/…。在这里,我使用 UIKit 方法而不是核心图形创建 PDF。
  • @Naresh 这回答了你的问题。在循环之后,finalString 是适合矩形的字符串。如果您想要长度,请致电finalString.length
猜你喜欢
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多