After 1 week, i found solution myself. Please check the efficient of the code and comment it.
My solution handles multiple number of lines of text you given for your control title of text.
Taste this type of truncation!!!
Solution:
-(NSString *)methodForDisplayTextWithTruncate:(UILabel *)lblFinalResult{
NSLog(@"Old Frame: %@", NSStringFromCGRect(lblFinalResult.frame));
NSLog(@"Event Length: %i", [lblFinalResult.text length]);
NSString *strGivenText, *strFuncResult, *stringThatFits, *backupStr;
int i,checkpoint=lblFinalResult.numberOfLines,bound=0;
NSArray *arrForGivenText_Words;
NSMutableArray *mutArrForWords;
stringThatFits=@"";
strFuncResult=@"";
backupStr=@"";
mutArrForWords=[[NSMutableArray alloc] initWithObjects:nil];
strGivenText=lblFinalResult.text;
arrForGivenText_Words = [strGivenText componentsSeparatedByString:@" "];
for(int y=0; y<[arrForGivenText_Words count];y++){
if(![[arrForGivenText_Words objectAtIndex:y] isEqualToString:@""]){
[mutArrForWords addObject:[arrForGivenText_Words objectAtIndex:y]];
}
}
for (i=0; i < [mutArrForWords count]; i++)
{
NSString *tempString = [stringThatFits stringByAppendingFormat:@"%@ ", mutArrForWords[i]];
NSLog(@"TempString:%@",tempString);
CGRect boundingRect = [tempString boundingRectWithSize:CGSizeMake(999, 999) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:lblFinalResult.font} context:nil];
if (boundingRect.size.width > lblFinalResult.frame.size.width) {
NSLog(@"Bound(%i)", bound++);
if(i==0){
[lblFinalResult setText:@"..."];
NSLog(@"New Frame: %@", NSStringFromCGRect(lblFinalResult.frame));
return lblFinalResult.text;
}
if(checkpoint>1){
backupStr=@"";
for (int j = 0 ; j < i; j++){
backupStr=[backupStr stringByAppendingFormat:@"%@ ", mutArrForWords[j]];
}
NSLog(@"Backup Bound:%@",backupStr);
stringThatFits=mutArrForWords[i];
stringThatFits=[stringThatFits stringByAppendingString:@" "];
checkpoint--;
}
else{
strFuncResult=@"";
for (int z = 0 ; z < i; z++)
{
strFuncResult = [strFuncResult stringByAppendingFormat:@"%@ ", mutArrForWords[z]];
}
strFuncResult = [strFuncResult substringToIndex:strFuncResult.length-(strFuncResult.length>0)];
lblFinalResult.frame= CGRectMake(lblFinalResult.frame.origin.x, lblFinalResult.frame.origin.y, lblFinalResult.frame.size.width+10, lblFinalResult.frame.size.height);
strFuncResult=[strFuncResult stringByAppendingString:@"..."];
[lblFinalResult setText:strFuncResult];
NSLog(@"Final_1:%@", lblFinalResult.text);
NSLog(@"Final Length: %i", [lblFinalResult.text length]);
NSLog(@"New Frame: %@", NSStringFromCGRect(lblFinalResult.frame));
return lblFinalResult.text;
}
}
else{
stringThatFits = tempString;
}
}
stringThatFits=@"";
for (int z = 0 ; z < i; z++)
{
stringThatFits = [stringThatFits stringByAppendingFormat:@"%@ ", mutArrForWords[z]];
}
stringThatFits = [stringThatFits substringToIndex:stringThatFits.length-(stringThatFits.length>0)];
[lblFinalResult setText:stringThatFits];
NSLog(@"Final_2:%@", lblFinalResult.text);
NSLog(@"Final Length: %i", [lblFinalResult.text length]);
NSLog(@"New Frame: %@", NSStringFromCGRect(lblFinalResult.frame));
return lblFinalResult.text;
}