Неправильный расчет при вычислении размера NSString с использованием sizewithfont: contraintedTosize: linebreakmode
-
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, вы можете найти дополнительное пространство, пытаясь.