誤った計算sizewithfont:constraintedTosize:lineBreakModeを使用してnsStringのサイズを計算する場合

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

  •  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のためにもう少しスペースを作るだけで、試してみて余分なスペースを見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top