2010-10-19 1 views
1

У меня есть UiTextView в том, что я хочу, чтобы оправдать текст, может кто-нибудь мне помочь, чтобы это сделатьКак оправдать текст в UITextView?

+0

возможно дубликат [выравнивание по ширине в UITextView - iPhone] (http://stackoverflow.com/questions/1301519/justified -alignment-в-UITextView-Iphone) –

ответ

0

Это может помочь, я сделал это для UILabel, он не идеален, я просто добавить пробелы, пока каждая строка не заполняет ширину прямоугольника лейбла.

+ (void) justifyText:(UILabel*) label 
{ 
    NSString *text = label.text; 
    text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; 

    UIFont *font = label.font; 
    CGRect rect = label.frame; 

    NSArray *wordArray = [text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

    NSMutableString *lineBreakText = [NSMutableString stringWithString:@""]; 
    NSMutableArray *lines = [NSMutableArray array]; 

    for (NSInteger i = 0; i < [wordArray count]; ++i) 
    { 
     NSMutableString *testStr = [NSMutableString stringWithString: lineBreakText]; 
     if (i != 0) 
     { 
      [testStr appendString:@" "]; 
     } 
     [testStr appendString:[wordArray objectAtIndex:i]]; 

     CGSize testSize = [testStr sizeWithFont:font constrainedToSize:rect.size lineBreakMode:UILineBreakModeCharacterWrap]; 

     if (testSize.height > [font lineHeight]) 
     { 
      [lines addObject:lineBreakText]; 
      lineBreakText = [NSMutableString stringWithString:@""]; 
      [lineBreakText appendString:[wordArray objectAtIndex:i]]; 
     } 
     else 
     { 
      if (i != 0) 
      { 
       [lineBreakText appendString:@" "]; 
      } 
      [lineBreakText appendString:[wordArray objectAtIndex:i]]; 
     } 

     if (i >= [wordArray count] - 1) 
     { 
      [lines addObject:lineBreakText]; 
     } 
    } 

    NSMutableString *spacingText = [NSMutableString stringWithString:@""]; 
    for (NSInteger i = 0; i < [lines count] - 1; ++i) 
    { 
     NSString *line = (NSString*)[lines objectAtIndex:i]; 
     NSMutableString *spacedStr = [NSMutableString stringWithString:line]; 

     NSArray *wordArray = [text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

     NSInteger spacesCount = [wordArray count] - 1; 

     if (spacesCount <= 0) 
     { 
      continue; 
     } 

     NSRange findInRng = NSMakeRange(0, [spacedStr length]); 
     NSRange spaceRng = [spacedStr rangeOfString:@" " options:0 range:findInRng]; 

     CGSize testSize = [spacedStr sizeWithFont:font constrainedToSize:rect.size lineBreakMode:UILineBreakModeCharacterWrap]; 

     while (testSize.height <= [font lineHeight]) 
     { 
      if (spaceRng.location == NSNotFound) 
      { 
       findInRng = NSMakeRange(0, [spacedStr length]); 
       spaceRng = [spacedStr rangeOfString:@" " options:0 range:findInRng]; 
      } 

      [spacedStr insertString:@" " atIndex:spaceRng.location]; 
      testSize = [spacedStr sizeWithFont:font constrainedToSize:rect.size lineBreakMode:UILineBreakModeCharacterWrap]; 

      findInRng = NSMakeRange(spaceRng.location + 2, [spacedStr length] - spaceRng.location - 2); 
      spaceRng = [spacedStr rangeOfString:@" " options:0 range:findInRng]; 
     } 

     if (i != 0) 
     { 
      [spacingText appendString:@"\n"]; 
     } 
     [spacingText appendString:spacedStr]; 
    } 

    [spacingText appendString:@"\n"]; 
    [spacingText appendString:(NSString*)[lines lastObject]]; 


    [label setLineBreakMode:UILineBreakModeTailTruncation]; 
    [label setText:spacingText]; 
} 
4

В IOS 6 вы можете сделать выравнивание текста с помощью этого кода

UITextView *textView = //init your text view 
textView.textAlignment = NSTextAlignmentJustified;