Неправильный расчет при вычислении размера NSString с использованием sizewithfont: contraintedTosize: linebreakmode

StackOverflow https://stackoverflow.com/questions/6815525

  •  25-10-2019
  •  | 
  •  

Вопрос

У меня есть uitableviewcell с подвесом, состоящим из UitextView. Содержание TextView является динамичным, поэтому я хочу измерить точную ширину и высоту для создания ячейки и текстового обзора без необходимости прокрутки.

Я создал следующий метод для измерения размера, который займет NSString:

- (CGSize)getSizeOfString:(NSString *)str font:(NSString *)theFont fontSize:(CGFloat)theSize {

    CGSize maxSize = CGSizeMake(280, CGFLOAT_MAX);
    UIFont *font = [UIFont fontWithName:theFont size:theSize];

    return [str sizeWithFont:font constrainedToSize:maxSize lineBreakMode:UILineBreakModeWordWrap];
}

Я использую это таким образом:

// CellForRowAtIndexPath
    ..... 

    CGSize size = [strTool getSizeOfString:text font:TEXT_FONT fontSize:TEXT_SIZE];
    CGFloat width = size.width;
    CGFloat height = size.height;

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(15, 10, width, height)];

    [textView setBackgroundColor:[UIColor blueColor]];
    textView.font = [UIFont fontWithName:TEXT_FONT size:TEXT_SIZE];
    textView.editable = NO;

    // Set value
    textView.text = text;

    [cell.contentView addSubview:textView];
    [textView release];

    return cell;

// heightForRowAtIndexPath
    NSString *returnStr;

    if (indexPath.section == SECTION_SHORT) 
        returnStr = self.manchet;
    else
        returnStr = self.newsText;

    return [strTool getSizeOfString:returnStr font:TEXT_FONT fontSize:TEXT_SIZE].height;

Но независимо от того, какая вычисленная высота слишком мала, что приводит к неприятному свитке внутри Cellview. Стоит отметить, что почти все тексты содержат линейные разбивки ( n).

Что я здесь делаю не так?

Спасибо

Это было полезно?

Решение

Я думаю, что ваш ** HeightForrowAtIndexPath ** должен выглядеть примерно так:

NSString *returnStr;
if (indexPath.section == SECTION_SHORT) returnStr = self.manchet;
else returnStr = self.newsText;
return [strTool getSizeOfString:returnStr font:TEXT_FONT 
                       fontSize:TEXT_SIZE].height+10.0f*2.0f;

А также вы должны принять во внимание то, что вы сделали смещением для текстового поля 15px вдоль x (что означает, какая ширина для Size -withfont должна быть меньше на 15px) и 10px сверху, я предлагаю использовать то же значение для нижней, чтобы она выглядела центрированной.

У ContentView также есть поля, примите все это во внимание.

Другие советы

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

NSString Drawinrect: WithFont:

Или просто сделайте немного больше места для UitextView, вы можете найти дополнительное пространство, пытаясь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top