Точно и без проблем разделить текст на две метки - PullRequest
3 голосов
/ 25 сентября 2011

Я пытаюсь создать эффект «обтекания» для текста вокруг изображения с заданными размерами.

         ___________
........|   
........| image
label.1.|
........|___________
....................
.......label.2......
....................
....................

Вот метод, который я сейчас использую:

- (NSArray *)splitString:(NSString*)str maxCharacters:(NSInteger)maxLength { //this will split the string to add to two UILabels
    NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:1];
    NSArray *wordArray = [str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSInteger numberOfWords = [wordArray count];
    NSInteger index = 0;
    NSInteger lengthOfNextWord = 0;

    while (index < numberOfWords) {
        NSMutableString *line = [NSMutableString stringWithCapacity:1];
        while ((([line length] + lengthOfNextWord + 1) <= maxLength) && (index < numberOfWords)) {
            lengthOfNextWord = [[wordArray objectAtIndex:index] length];
            [line appendString:[wordArray objectAtIndex:index]];
            index++;
            if (index < numberOfWords) {
                [line appendString:@" "];
            }
        }
        [tempArray addObject:line];
    }
    return tempArray;
}

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

Вот как я использую метод:

NSArray *splitStringArray = [self splitString:eventRecord.summary maxCharacters:280];

    UILabel *firstSumValue = [[UILabel alloc] init];
    NSString *firstSumString = [splitStringArray objectAtIndex:0];
    CGSize maxFirstSumSize = CGSizeMake(185.0,150.0);
    UIFont *firstSumFont = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12];
    CGSize firstSumStringSize = [firstSumString sizeWithFont:firstSumFont
                                     constrainedToSize:maxFirstSumSize
                                         lineBreakMode:firstSumValue.lineBreakMode];



    CGRect firstSumFrame = CGRectMake(10.0, presentedValue.frame.origin.y + presentedValue.frame.size.height, 185.0, firstSumStringSize.height);


    firstSumValue.frame = firstSumFrame;

    firstSumValue.font = [UIFont fontWithName:@"HelveticaNeue" size:12];
    firstSumValue.lineBreakMode = UILineBreakModeWordWrap;
    firstSumValue.numberOfLines = 0 ;
    [self.mainScrollView addSubview:firstSumValue];



    firstSumValue.text = [splitStringArray objectAtIndex:0];


    UILabel *secondSumValue = [[UILabel alloc] init];

    NSInteger isSecond = 0;  //no
    if([splitStringArray count] > 1){
        isSecond = 1;  //yes

        NSString *secondSumString = [splitStringArray objectAtIndex:1];
        CGSize maxSecondSumSize = CGSizeMake(310.0,9999.0);
        UIFont *secondSumFont = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12];
        CGSize secondSumStringSize = [secondSumString sizeWithFont:secondSumFont
                                               constrainedToSize:maxSecondSumSize
                                                   lineBreakMode:secondSumValue.lineBreakMode];



        CGRect secondSumFrame = CGRectMake(10.0, firstSumValue.frame.origin.y + firstSumValue.frame.size.height, 310.0, secondSumStringSize.height);


        secondSumValue.frame = secondSumFrame;

        secondSumValue.font = [UIFont fontWithName:@"HelveticaNeue" size:12];
        secondSumValue.lineBreakMode = UILineBreakModeWordWrap;
        secondSumValue.numberOfLines = 0 ;
        [self.mainScrollView addSubview:secondSumValue];


         secondSumValue.text = [splitStringArray objectAtIndex:1];


    }

Как мне сохранить все согласованным и правильно выровненным. Возможно, есть лучший метод, который можно было бы рекомендовать. Не основной текст, потому что это выходит за рамки моих знаний.

1 Ответ

1 голос
/ 25 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...