0

UITextView で構成されるサブビューを持つ UITableViewCell があります。テキストビューの内容は動的なので、正確な幅と高さを測定して、スクロールする必要のないセルとテキストビューを作成したいと考えています。

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) が含まれていることに注意してください。

ここで何が間違っていますか?

ありがとう

4

2 に答える 2

0

**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;

また、Xに沿って15pxのテキストフィールド(つまり、sizeWithFontの幅は15pxで小さくする必要があります)と上から10pxのオフセットを考慮に入れる必要があります。中央に表示するには、下に同じ値を使用することをお勧めします。

contentViewにもマージンがあります。これをすべて考慮に入れてください。

于 2011-07-25T12:22:07.863 に答える
0

UITextView は、計算したサイズよりも少し大きなスペースが必要です。上マージンと下マージンがあるので、どれくらいかわかりません。完璧なフィット感が必要な場合は、お試しください

[NSString drawInRect:withFont:]

または、UITextView 用にもう少しスペースを空けてください。試してみると、余分なスペースを見つけることができます。

于 2011-07-25T12:28:09.910 に答える