Как выровнять текст в UITextView? - PullRequest
1 голос
/ 19 октября 2010

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

Ответы [ 3 ]

4 голосов
/ 07 июня 2013

В ios 6 вы можете выравнивать текст, используя этот код

 UITextView *textView = //init your text view 
textView.textAlignment = NSTextAlignmentJustified;
1 голос
/ 19 октября 2010

это не похоже на то, что в настоящее время доступно только со стандартными API, но здесь есть реальное решение для стекопотока.

Как изменить интервал между буквами UILabel / UIFont?

0 голосов
/ 04 июля 2011

Это может помочь, я сделал это для 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...