私はsizeWithFontの端のケースを見つけたと思います:constrainedToSize:網膜ディスプレイ上で、時には(ワードラッピングに基づいているようです)実際に必要とされるよりも背が高く、より重要なのはそれが実際に描くものよりも大きい。NSString sizeWithFont:constrainedToSize:網膜ディスプレイ上の不正確な高さを返す
注:私が使用している実際のコードは、パフォーマンス中心の手書き可変高さテーブルビューのセルコード内に埋め込まれています。そのため、問題を可能な限りシンプルなものにしています。 (私の質問以外に何かをしようとするときに注意してください:-)
このサンプルのUIViewは内容を塗りつぶし、適切なテキストを測定(折り返し)し、その矩形を塗りつぶしてからテキストを描画します。
網膜デバイス(またはシミュレータ)では、高さが1ラインも高すぎますが、網膜前デバイス(またはシミュレータ)では正しい高さを返します。
私は修正したいバグですので、誰もが知っていることを大変感謝しています!
大変ありがとうございます!
-eric
- (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];
}
全体単純なプロジェクトはhere可能です。
シミュレータ画像:
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
タフ1を、それを実行したときに、私が得たものでしょうか?助けてもらえますか? Tumbleweedのバッジは、獲得する超楽しさではありませんでした! – eric
サンプルプロジェクトを実行した後、シミュレータまたはSDKのバグだと思います。はい、iOS 4.3のXcode 4では問題ありません。 – cxa
ありがとうございました。それは現在のXcode/iOSのように機能しています – eric