7

sizeWithFont:constrainedToSizeのエッジケースを見つけたと思います。Retinaディスプレイでは、実際に必要な高さよりも1行高く、さらに重要なことに、実際に描画するよりも1行高い高さが返されることがあります(ワードラップに基づいているようです)。 。

注:私が使用している実際のコードは、パフォーマンス中心の手描きの可変高さテーブルビューセルコード内に埋め込まれているため、問題を可能な限り単純なサンプルコードに絞り込みました。(私の質問以外に答えようとするときは、これに注意してください:-)

このサンプルUIViewは、コンテンツを塗りつぶし、収まるようにテキストを測定(折り返し)し、その四角形を塗りつぶしてから、テキストを描画します。

網膜デバイス(またはシミュレーター)では、高さが1行高すぎて返されますが、網膜前デバイス(またはシミュレーター)では、正しい高さが返されます。

それは私が修正したいバグなので、誰かが持っているかもしれない洞察を大いに感謝します!

どうもありがとう!

-エリック

- (void)drawRect:(CGRect)rect {
 NSString * theString = @"Lorem ipsum dolor sit ameyyet, consectetur adipiscing elit. Etiam vel justo leo. Curabitur porta, elit vel.";
 UIFont * theFont = [UIFont systemFontOfSize:12];
 CGSize theConstraint = CGSizeMake(rect.size.width - 20, rect.size.height - 20);
 CGSize theResultSize = [theString sizeWithFont:theFont constrainedToSize:theConstraint];

 // dump the measurements
 NSLog(@"returned a size h = %f, w = %f", theResultSize.height, theResultSize.width);

 // fill the whole rect
 CGContextRef context = UIGraphicsGetCurrentContext();
 [[UIColor yellowColor] set];
 CGContextFillRect(context, rect);

 // fill the measured rect
 CGRect theRect = CGRectMake(10, 10, theResultSize.width, theResultSize.height);
 context = UIGraphicsGetCurrentContext();
 [[UIColor cyanColor] set];
 CGContextFillRect(context, theRect);

 // draw the text
 [[UIColor blackColor] set];
 [theString drawInRect:theRect withFont:theFont];
}

単純なプロジェクト全体はここから入手できます。

シミュレーター画像: http:
//files.droplr.com/files/9979822/aLDJ.Screen%20shot%202011-01-11%20at%2012%3A34%3A34.png http://files.droplr.com/files/ 9979822 / YpCM.Screen%20shot%202011-01-11%20at%2012%3A36%3A47.png

4

3 に答える 3

2

シミュレータに問題があるようです。これは、OS4.3.2でRetinaシミュレーターを使用して実行したときに得られたものです。

ここに画像の説明を入力してください

于 2011-12-02T09:03:43.987 に答える
1

以下は、動的テキストコンテンツのラベルの高さを見つけるために使用する方法です。これは私のアプリでは正常に機能します


- (float)getHeightFortheDynamicLabel:(NSString *)stringForTheLabel
{
    UITextView *aSampleTextView;
    // 30 is the minimum height
    aSampleTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, mywidth, 30)];
    aSampleTextView.text = stringForTheLabel;
    aSampleTextView.font = [UIFont systemFontOfSize:kMyFontSize];
    aSampleTextView.alpha = 0;
    [self.view addSubview:aSampleTextView];
    float textViewHeight = aSampleTextView.contentSize.height;
    [aSampleTextView removeFromSuperview];
    [aSampleTextView release];
    return  textViewHeight;
}

于 2011-12-02T08:58:46.400 に答える
0
        NSString *strSubstring = @"asdfghjklasdfghjkl adsds";

        CGFloat maxWidth = 205.0;
        CGFloat maxHeight = 9999;
        CGSize maximumLabelSize = CGSizeMake(maxWidth,maxHeight);
        CGSize expectedLabelSize = [strSubstring sizeWithFont:[UIFont fontWithName:@"StagSans-Light" size:12] constrainedToSize:maximumLabelSize lineBreakMode:UILineBreakModeWordWrap];

        NSLog(@"returned a size h = %f, w = %f", expectedLabelSize.height, expectedLabelSize.width);

        return expectedLabelSize;
于 2012-03-19T10:15:20.157 に答える