誤った計算sizewithfont:constraintedTosize:lineBreakModeを使用してnsStringのサイズを計算する場合
-
25-10-2019 - |
質問
uitextViewで構成されるサブビューを備えたuitableviewcellがあります。 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;
しかし、計算された高さが小さすぎても、セルビュー内の厄介な巻物になります。ほとんどすべてのテキストにラインブレイク( n)が含まれていることに言及する価値があります。
ここで何が間違っているのですか?
ありがとう
解決
私はあなたの** heightforrotindexpath **は次のように見えるべきだと思います:
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;
また、Xに沿ってテキストフィールド15pxでオフセットしたもの(15pxでサイズフォントの幅が小さくなる必要があることを意味します)と上から10pxを考慮に入れる必要があります。
ContentViewにはマージンもあります。これをすべて考慮してください。
他のヒント
uitextViewは、計算したサイズよりも少し大きなスペースが必要です。それは最高マージンと一番下のマージンを持っているので、それがいくらかはわかりません。完璧にフィットしたい場合は、試してみてください
nsstring drawinRect:withfont:
または、uitextviewのためにもう少しスペースを作るだけで、試してみて余分なスペースを見つけることができます。
所属していません StackOverflow